sig
  module type STORE =
    sig
      type t
      type key = IrminPath.t
      type value
      val read : t -> key -> value option Lwt.t
      val read_exn : t -> key -> value Lwt.t
      val mem : t -> key -> bool Lwt.t
      val list : t -> key list -> key list Lwt.t
      val dump : t -> (key * value) list Lwt.t
      val watch : t -> key -> value Lwt_stream.t
      type branch
      type origin = IrminOrigin.t
      val create : ?branch:branch -> unit -> t Lwt.t
      val detach : t -> unit Lwt.t
      val branch : t -> branch option
      val branch_exn : t -> branch
      val set_branch : t -> branch -> unit
      val update : t -> ?origin:origin -> key -> value -> unit Lwt.t
      val remove : t -> ?origin:origin -> key -> unit Lwt.t
      val clone : t -> branch -> t option Lwt.t
      val clone_force : t -> branch -> t Lwt.t
      val switch : t -> branch -> unit Lwt.t
      val merge :
        t -> ?origin:origin -> branch -> unit IrminMerge.result Lwt.t
      val merge_exn : t -> ?origin:origin -> branch -> unit Lwt.t
      module Block :
        sig
          type key
          type contents = value
          type value = (key, contents) IrminBlock.t
          type node = key IrminNode.t
          type commit = key IrminCommit.t
          type t
          val create : unit -> t Lwt.t
          val read : t -> key -> value option Lwt.t
          val read_exn : t -> key -> value Lwt.t
          val mem : t -> key -> bool Lwt.t
          val dump : t -> (key * value) list Lwt.t
          val add : t -> value -> key Lwt.t
          val list : t -> ?depth:int -> key list -> key list Lwt.t
          module Contents :
            sig
              type t
              type key = key
              type value = contents
              val create : unit -> t Lwt.t
              val read : t -> key -> value option Lwt.t
              val read_exn : t -> key -> value Lwt.t
              val mem : t -> key -> bool Lwt.t
              val list : t -> key list -> key list Lwt.t
              val dump : t -> (key * value) list Lwt.t
              val add : t -> value -> key Lwt.t
              val merge : t -> key IrminMerge.t
              module Key :
                sig
                  type t = key
                  val of_string : string -> t
                  val to_string : t -> string
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val ascending : t -> t -> int
                  val descending : t -> t -> int
                  val between : t -> low:t -> high:t -> bool
                  module Replace_polymorphic_compare :
                    sig
                      val ( >= ) : t -> t -> bool
                      val ( <= ) : t -> t -> bool
                      val ( = ) : t -> t -> bool
                      val ( > ) : t -> t -> bool
                      val ( < ) : t -> t -> bool
                      val ( <> ) : t -> t -> bool
                      val equal : t -> t -> bool
                      val compare : t -> t -> int
                      val min : t -> t -> t
                      val max : t -> t -> t
                      val _squelch_unused_module_warning_ : unit
                    end
                  type comparator_witness
                  val validate_lbound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_ubound :
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_bound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val comparator :
                    (t, comparator_witness) Core_kernel.Comparator.comparator
                  module Map :
                    sig
                      module Key :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                        end
                      module Tree :
                        sig
                          type 'a t =
                              (Key.t, 'a, Key.comparator_witness)
                              Core_kernel.Core_map.Tree.t
                          val empty : 'a t
                          val singleton : Key.t -> '-> 'a t
                          val of_alist :
                            (Key.t * 'a) list ->
                            [ `Duplicate_key of Key.t | `Ok of 'a t ]
                          val of_alist_or_error :
                            (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                          val of_alist_exn : (Key.t * 'a) list -> 'a t
                          val of_alist_multi : (Key.t * 'a) list -> 'a list t
                          val of_alist_fold :
                            (Key.t * 'a) list ->
                            init:'-> f:('-> '-> 'b) -> 'b t
                          val of_alist_reduce :
                            (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                          val of_sorted_array :
                            (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked :
                            (Key.t * 'a) array -> 'a t
                          val of_tree : 'a t -> 'a t
                          val invariants : 'a t -> bool
                          val is_empty : 'a t -> bool
                          val length : 'a t -> int
                          val add : 'a t -> key:Key.t -> data:'-> 'a t
                          val add_multi :
                            'a list t -> key:Key.t -> data:'-> 'a list t
                          val change :
                            'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                          val find : 'a t -> Key.t -> 'a option
                          val find_exn : 'a t -> Key.t -> 'a
                          val remove : 'a t -> Key.t -> 'a t
                          val mem : 'a t -> Key.t -> bool
                          val iter :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val iter2 :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               data:[ `Both of 'a * 'b
                                    | `Left of 'a
                                    | `Right of 'b ] ->
                               unit) ->
                            unit
                          val map : 'a t -> f:('-> 'b) -> 'b t
                          val mapi :
                            'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                          val fold :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val fold_right :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val filter :
                            'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                          val filter_map :
                            'a t -> f:('-> 'b option) -> 'b t
                          val filter_mapi :
                            'a t ->
                            f:(key:Key.t -> data:'-> 'b option) -> 'b t
                          val compare_direct :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val equal :
                            ('-> '-> bool) -> 'a t -> 'a t -> bool
                          val keys : 'a t -> Key.t list
                          val data : 'a t -> 'a list
                          val to_alist : 'a t -> (Key.t * 'a) list
                          val validate :
                            name:(Key.t -> string) ->
                            'Core_kernel.Validate.check ->
                            'a t Core_kernel.Validate.check
                          val merge :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            'c t
                          val symmetric_diff :
                            'a t ->
                            'a t ->
                            data_equal:('-> '-> bool) ->
                            (Key.t *
                             [ `Left of 'a
                             | `Right of 'a
                             | `Unequal of 'a * 'a ])
                            Core_kernel.Sequence.t
                          val min_elt : 'a t -> (Key.t * 'a) option
                          val min_elt_exn : 'a t -> Key.t * 'a
                          val max_elt : 'a t -> (Key.t * 'a) option
                          val max_elt_exn : 'a t -> Key.t * 'a
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val exists : 'a t -> f:('-> bool) -> bool
                          val fold_range_inclusive :
                            'a t ->
                            min:Key.t ->
                            max:Key.t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val range_to_alist :
                            'a t ->
                            min:Key.t -> max:Key.t -> (Key.t * 'a) list
                          val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val rank : 'a t -> Key.t -> int option
                          val to_tree : 'a t -> 'a t
                          val to_sequence :
                            ?keys_in:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Key.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Key.t ] ->
                            'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                        end
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'Tree.t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'Tree.t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Set :
                    sig
                      module Elt :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                        end
                      module Tree :
                        sig
                          type t =
                              (Elt.t, Elt.comparator_witness)
                              Core_kernel.Core_set.Tree.t
                          val length : t -> int
                          val is_empty : t -> bool
                          val iter : t -> f:(Elt.t -> unit) -> unit
                          val fold :
                            t ->
                            init:'accum ->
                            f:('accum -> Elt.t -> 'accum) -> 'accum
                          val exists : t -> f:(Elt.t -> bool) -> bool
                          val for_all : t -> f:(Elt.t -> bool) -> bool
                          val count : t -> f:(Elt.t -> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            t -> f:(Elt.t -> 'sum) -> 'sum
                          val find : t -> f:(Elt.t -> bool) -> Elt.t option
                          val find_map :
                            t -> f:(Elt.t -> 'a option) -> 'a option
                          val to_list : t -> Elt.t list
                          val to_array : t -> Elt.t array
                          val invariants : t -> bool
                          val mem : t -> Elt.t -> bool
                          val add : t -> Elt.t -> t
                          val remove : t -> Elt.t -> t
                          val union : t -> t -> t
                          val inter : t -> t -> t
                          val diff : t -> t -> t
                          val compare_direct : t -> t -> int
                          val equal : t -> t -> bool
                          val subset : t -> t -> bool
                          val fold_until :
                            t ->
                            init:'->
                            f:('->
                               Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                            'b
                          val fold_right :
                            t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                          val iter2 :
                            t ->
                            t ->
                            f:([ `Both of Elt.t * Elt.t
                               | `Left of Elt.t
                               | `Right of Elt.t ] -> unit) ->
                            unit
                          val filter : t -> f:(Elt.t -> bool) -> t
                          val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                          val elements : t -> Elt.t list
                          val min_elt : t -> Elt.t option
                          val min_elt_exn : t -> Elt.t
                          val max_elt : t -> Elt.t option
                          val max_elt_exn : t -> Elt.t
                          val choose : t -> Elt.t option
                          val choose_exn : t -> Elt.t
                          val split : t -> Elt.t -> t * bool * t
                          val group_by :
                            t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                          val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                          val find_index : t -> int -> Elt.t option
                          val remove_index : t -> int -> t
                          val to_tree : t -> t
                          val to_sequence :
                            ?in_:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Elt.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Elt.t ] ->
                            t -> Elt.t Core_kernel.Sequence.t
                          val to_map :
                            t ->
                            f:(Elt.t -> 'data) ->
                            (Elt.t, 'data, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t
                          val empty : t
                          val singleton : Elt.t -> t
                          val union_list : t list -> t
                          val of_list : Elt.t list -> t
                          val of_array : Elt.t array -> t
                          val of_sorted_array :
                            Elt.t array -> t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked : Elt.t array -> t
                          val stable_dedup_list : Elt.t list -> Elt.t list
                          val map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t) -> t
                          val filter_map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t option) -> t
                          val of_tree : t -> t
                          val of_map_keys :
                            (Elt.t, 'a, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t -> t
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> Tree.t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : Tree.t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hashable : sig type t = t end
                  val hash : t -> int
                  val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
                  module Table :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Pooled_hashtbl :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Pooled_hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Hash_set :
                    sig
                      type elt = t
                      type 'a hash_set = 'Core_kernel.Hash_set.t
                      type t = elt hash_set
                      type 'a t_ = t
                      type 'a elt_ = elt
                      val create :
                        ('a, unit -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val of_list :
                        ('a, 'a elt_ list -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hash_queue :
                    sig
                      module Key :
                        sig
                          type t = t
                          val hash : t -> int
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type 'a t
                      val length : 'a t -> int
                      val is_empty : 'a t -> bool
                      val iter : 'a t -> f:('-> unit) -> unit
                      val fold :
                        'a t ->
                        init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                      val exists : 'a t -> f:('-> bool) -> bool
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val count : 'a t -> f:('-> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        'a t -> f:('-> 'sum) -> 'sum
                      val find : 'a t -> f:('-> bool) -> 'a option
                      val find_map : 'a t -> f:('-> 'b option) -> 'b option
                      val to_list : 'a t -> 'a list
                      val to_array : 'a t -> 'a array
                      val min_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val max_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val invariant : 'a t -> unit
                      val create : unit -> 'a t
                      val clear : 'a t -> unit
                      val mem : 'a t -> Key.t -> bool
                      val lookup : 'a t -> Key.t -> 'a option
                      val lookup_exn : 'a t -> Key.t -> 'a
                      val enqueue :
                        'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                      val enqueue_exn : 'a t -> Key.t -> '-> unit
                      val first : 'a t -> 'a option
                      val keys : 'a t -> Key.t list
                      val dequeue : 'a t -> 'a option
                      val dequeue_exn : 'a t -> 'a
                      val dequeue_with_key : 'a t -> (Key.t * 'a) option
                      val dequeue_with_key_exn : 'a t -> Key.t * 'a
                      val dequeue_all : 'a t -> f:('-> unit) -> unit
                      val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                      val remove_exn : 'a t -> Key.t -> unit
                      val replace :
                        'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                      val replace_exn : 'a t -> Key.t -> '-> unit
                      val iteri :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val foldi :
                        'a t ->
                        init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                    end
                  val pp : Format.formatter -> t -> unit
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_t : t Bin_prot.Type_class.t
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val of_json : Ezjsonm.t -> t
                  val to_json : t -> Ezjsonm.t
                  val of_raw : string -> t
                  val to_raw : t -> string
                  val of_bytes : Core_kernel.Std.Bigstring.t -> t
                  val of_bytes' : string -> t
                end
              module Value :
                sig
                  type t = value
                  val of_string : string -> t
                  val to_string : t -> string
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val ascending : t -> t -> int
                  val descending : t -> t -> int
                  val between : t -> low:t -> high:t -> bool
                  module Replace_polymorphic_compare :
                    sig
                      val ( >= ) : t -> t -> bool
                      val ( <= ) : t -> t -> bool
                      val ( = ) : t -> t -> bool
                      val ( > ) : t -> t -> bool
                      val ( < ) : t -> t -> bool
                      val ( <> ) : t -> t -> bool
                      val equal : t -> t -> bool
                      val compare : t -> t -> int
                      val min : t -> t -> t
                      val max : t -> t -> t
                      val _squelch_unused_module_warning_ : unit
                    end
                  type comparator_witness
                  val validate_lbound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_ubound :
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_bound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val comparator :
                    (t, comparator_witness) Core_kernel.Comparator.comparator
                  module Map :
                    sig
                      module Key :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                        end
                      module Tree :
                        sig
                          type 'a t =
                              (Key.t, 'a, Key.comparator_witness)
                              Core_kernel.Core_map.Tree.t
                          val empty : 'a t
                          val singleton : Key.t -> '-> 'a t
                          val of_alist :
                            (Key.t * 'a) list ->
                            [ `Duplicate_key of Key.t | `Ok of 'a t ]
                          val of_alist_or_error :
                            (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                          val of_alist_exn : (Key.t * 'a) list -> 'a t
                          val of_alist_multi : (Key.t * 'a) list -> 'a list t
                          val of_alist_fold :
                            (Key.t * 'a) list ->
                            init:'-> f:('-> '-> 'b) -> 'b t
                          val of_alist_reduce :
                            (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                          val of_sorted_array :
                            (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked :
                            (Key.t * 'a) array -> 'a t
                          val of_tree : 'a t -> 'a t
                          val invariants : 'a t -> bool
                          val is_empty : 'a t -> bool
                          val length : 'a t -> int
                          val add : 'a t -> key:Key.t -> data:'-> 'a t
                          val add_multi :
                            'a list t -> key:Key.t -> data:'-> 'a list t
                          val change :
                            'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                          val find : 'a t -> Key.t -> 'a option
                          val find_exn : 'a t -> Key.t -> 'a
                          val remove : 'a t -> Key.t -> 'a t
                          val mem : 'a t -> Key.t -> bool
                          val iter :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val iter2 :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               data:[ `Both of 'a * 'b
                                    | `Left of 'a
                                    | `Right of 'b ] ->
                               unit) ->
                            unit
                          val map : 'a t -> f:('-> 'b) -> 'b t
                          val mapi :
                            'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                          val fold :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val fold_right :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val filter :
                            'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                          val filter_map :
                            'a t -> f:('-> 'b option) -> 'b t
                          val filter_mapi :
                            'a t ->
                            f:(key:Key.t -> data:'-> 'b option) -> 'b t
                          val compare_direct :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val equal :
                            ('-> '-> bool) -> 'a t -> 'a t -> bool
                          val keys : 'a t -> Key.t list
                          val data : 'a t -> 'a list
                          val to_alist : 'a t -> (Key.t * 'a) list
                          val validate :
                            name:(Key.t -> string) ->
                            'Core_kernel.Validate.check ->
                            'a t Core_kernel.Validate.check
                          val merge :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            'c t
                          val symmetric_diff :
                            'a t ->
                            'a t ->
                            data_equal:('-> '-> bool) ->
                            (Key.t *
                             [ `Left of 'a
                             | `Right of 'a
                             | `Unequal of 'a * 'a ])
                            Core_kernel.Sequence.t
                          val min_elt : 'a t -> (Key.t * 'a) option
                          val min_elt_exn : 'a t -> Key.t * 'a
                          val max_elt : 'a t -> (Key.t * 'a) option
                          val max_elt_exn : 'a t -> Key.t * 'a
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val exists : 'a t -> f:('-> bool) -> bool
                          val fold_range_inclusive :
                            'a t ->
                            min:Key.t ->
                            max:Key.t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val range_to_alist :
                            'a t ->
                            min:Key.t -> max:Key.t -> (Key.t * 'a) list
                          val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val rank : 'a t -> Key.t -> int option
                          val to_tree : 'a t -> 'a t
                          val to_sequence :
                            ?keys_in:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Key.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Key.t ] ->
                            'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                        end
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'Tree.t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'Tree.t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Set :
                    sig
                      module Elt :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                        end
                      module Tree :
                        sig
                          type t =
                              (Elt.t, Elt.comparator_witness)
                              Core_kernel.Core_set.Tree.t
                          val length : t -> int
                          val is_empty : t -> bool
                          val iter : t -> f:(Elt.t -> unit) -> unit
                          val fold :
                            t ->
                            init:'accum ->
                            f:('accum -> Elt.t -> 'accum) -> 'accum
                          val exists : t -> f:(Elt.t -> bool) -> bool
                          val for_all : t -> f:(Elt.t -> bool) -> bool
                          val count : t -> f:(Elt.t -> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            t -> f:(Elt.t -> 'sum) -> 'sum
                          val find : t -> f:(Elt.t -> bool) -> Elt.t option
                          val find_map :
                            t -> f:(Elt.t -> 'a option) -> 'a option
                          val to_list : t -> Elt.t list
                          val to_array : t -> Elt.t array
                          val invariants : t -> bool
                          val mem : t -> Elt.t -> bool
                          val add : t -> Elt.t -> t
                          val remove : t -> Elt.t -> t
                          val union : t -> t -> t
                          val inter : t -> t -> t
                          val diff : t -> t -> t
                          val compare_direct : t -> t -> int
                          val equal : t -> t -> bool
                          val subset : t -> t -> bool
                          val fold_until :
                            t ->
                            init:'->
                            f:('->
                               Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                            'b
                          val fold_right :
                            t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                          val iter2 :
                            t ->
                            t ->
                            f:([ `Both of Elt.t * Elt.t
                               | `Left of Elt.t
                               | `Right of Elt.t ] -> unit) ->
                            unit
                          val filter : t -> f:(Elt.t -> bool) -> t
                          val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                          val elements : t -> Elt.t list
                          val min_elt : t -> Elt.t option
                          val min_elt_exn : t -> Elt.t
                          val max_elt : t -> Elt.t option
                          val max_elt_exn : t -> Elt.t
                          val choose : t -> Elt.t option
                          val choose_exn : t -> Elt.t
                          val split : t -> Elt.t -> t * bool * t
                          val group_by :
                            t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                          val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                          val find_index : t -> int -> Elt.t option
                          val remove_index : t -> int -> t
                          val to_tree : t -> t
                          val to_sequence :
                            ?in_:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Elt.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Elt.t ] ->
                            t -> Elt.t Core_kernel.Sequence.t
                          val to_map :
                            t ->
                            f:(Elt.t -> 'data) ->
                            (Elt.t, 'data, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t
                          val empty : t
                          val singleton : Elt.t -> t
                          val union_list : t list -> t
                          val of_list : Elt.t list -> t
                          val of_array : Elt.t array -> t
                          val of_sorted_array :
                            Elt.t array -> t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked : Elt.t array -> t
                          val stable_dedup_list : Elt.t list -> Elt.t list
                          val map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t) -> t
                          val filter_map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t option) -> t
                          val of_tree : t -> t
                          val of_map_keys :
                            (Elt.t, 'a, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t -> t
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> Tree.t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : Tree.t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hashable : sig type t = t end
                  val hash : t -> int
                  val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
                  module Table :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Pooled_hashtbl :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Pooled_hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Hash_set :
                    sig
                      type elt = t
                      type 'a hash_set = 'Core_kernel.Hash_set.t
                      type t = elt hash_set
                      type 'a t_ = t
                      type 'a elt_ = elt
                      val create :
                        ('a, unit -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val of_list :
                        ('a, 'a elt_ list -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hash_queue :
                    sig
                      module Key :
                        sig
                          type t = t
                          val hash : t -> int
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type 'a t
                      val length : 'a t -> int
                      val is_empty : 'a t -> bool
                      val iter : 'a t -> f:('-> unit) -> unit
                      val fold :
                        'a t ->
                        init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                      val exists : 'a t -> f:('-> bool) -> bool
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val count : 'a t -> f:('-> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        'a t -> f:('-> 'sum) -> 'sum
                      val find : 'a t -> f:('-> bool) -> 'a option
                      val find_map : 'a t -> f:('-> 'b option) -> 'b option
                      val to_list : 'a t -> 'a list
                      val to_array : 'a t -> 'a array
                      val min_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val max_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val invariant : 'a t -> unit
                      val create : unit -> 'a t
                      val clear : 'a t -> unit
                      val mem : 'a t -> Key.t -> bool
                      val lookup : 'a t -> Key.t -> 'a option
                      val lookup_exn : 'a t -> Key.t -> 'a
                      val enqueue :
                        'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                      val enqueue_exn : 'a t -> Key.t -> '-> unit
                      val first : 'a t -> 'a option
                      val keys : 'a t -> Key.t list
                      val dequeue : 'a t -> 'a option
                      val dequeue_exn : 'a t -> 'a
                      val dequeue_with_key : 'a t -> (Key.t * 'a) option
                      val dequeue_with_key_exn : 'a t -> Key.t * 'a
                      val dequeue_all : 'a t -> f:('-> unit) -> unit
                      val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                      val remove_exn : 'a t -> Key.t -> unit
                      val replace :
                        'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                      val replace_exn : 'a t -> Key.t -> '-> unit
                      val iteri :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val foldi :
                        'a t ->
                        init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                    end
                  val pp : Format.formatter -> t -> unit
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_t : t Bin_prot.Type_class.t
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val of_json : Ezjsonm.t -> t
                  val to_json : t -> Ezjsonm.t
                  val merge : t IrminMerge.t
                end
            end
          module Node :
            sig
              type key = key
              type value = key IrminNode.t
              type t
              val create : unit -> t Lwt.t
              val read : t -> key -> value option Lwt.t
              val read_exn : t -> key -> value Lwt.t
              val mem : t -> key -> bool Lwt.t
              val list : t -> key list -> key list Lwt.t
              val dump : t -> (key * value) list Lwt.t
              val add : t -> value -> key Lwt.t
              type contents = contents
              type path = IrminPath.t
              val node :
                t ->
                ?contents:contents ->
                ?succ:(string * value) list -> unit -> (key * value) Lwt.t
              val contents : t -> value -> contents Lwt.t option
              val succ :
                t -> value -> value Lwt.t Core_kernel.Std.String.Map.t
              val sub : t -> value -> path -> value option Lwt.t
              val sub_exn : t -> value -> path -> value Lwt.t
              val map : t -> value -> path -> (value -> value) -> value Lwt.t
              val update : t -> value -> path -> contents -> value Lwt.t
              val find : t -> value -> path -> contents option Lwt.t
              val find_exn : t -> value -> path -> contents Lwt.t
              val remove : t -> value -> path -> value Lwt.t
              val valid : t -> value -> path -> bool Lwt.t
              val merge : t -> key IrminMerge.t
              module Key :
                sig
                  type t = key
                  val of_string : string -> t
                  val to_string : t -> string
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val ascending : t -> t -> int
                  val descending : t -> t -> int
                  val between : t -> low:t -> high:t -> bool
                  module Replace_polymorphic_compare :
                    sig
                      val ( >= ) : t -> t -> bool
                      val ( <= ) : t -> t -> bool
                      val ( = ) : t -> t -> bool
                      val ( > ) : t -> t -> bool
                      val ( < ) : t -> t -> bool
                      val ( <> ) : t -> t -> bool
                      val equal : t -> t -> bool
                      val compare : t -> t -> int
                      val min : t -> t -> t
                      val max : t -> t -> t
                      val _squelch_unused_module_warning_ : unit
                    end
                  type comparator_witness
                  val validate_lbound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_ubound :
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_bound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val comparator :
                    (t, comparator_witness) Core_kernel.Comparator.comparator
                  module Map :
                    sig
                      module Key :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                        end
                      module Tree :
                        sig
                          type 'a t =
                              (Key.t, 'a, Key.comparator_witness)
                              Core_kernel.Core_map.Tree.t
                          val empty : 'a t
                          val singleton : Key.t -> '-> 'a t
                          val of_alist :
                            (Key.t * 'a) list ->
                            [ `Duplicate_key of Key.t | `Ok of 'a t ]
                          val of_alist_or_error :
                            (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                          val of_alist_exn : (Key.t * 'a) list -> 'a t
                          val of_alist_multi : (Key.t * 'a) list -> 'a list t
                          val of_alist_fold :
                            (Key.t * 'a) list ->
                            init:'-> f:('-> '-> 'b) -> 'b t
                          val of_alist_reduce :
                            (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                          val of_sorted_array :
                            (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked :
                            (Key.t * 'a) array -> 'a t
                          val of_tree : 'a t -> 'a t
                          val invariants : 'a t -> bool
                          val is_empty : 'a t -> bool
                          val length : 'a t -> int
                          val add : 'a t -> key:Key.t -> data:'-> 'a t
                          val add_multi :
                            'a list t -> key:Key.t -> data:'-> 'a list t
                          val change :
                            'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                          val find : 'a t -> Key.t -> 'a option
                          val find_exn : 'a t -> Key.t -> 'a
                          val remove : 'a t -> Key.t -> 'a t
                          val mem : 'a t -> Key.t -> bool
                          val iter :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val iter2 :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               data:[ `Both of 'a * 'b
                                    | `Left of 'a
                                    | `Right of 'b ] ->
                               unit) ->
                            unit
                          val map : 'a t -> f:('-> 'b) -> 'b t
                          val mapi :
                            'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                          val fold :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val fold_right :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val filter :
                            'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                          val filter_map :
                            'a t -> f:('-> 'b option) -> 'b t
                          val filter_mapi :
                            'a t ->
                            f:(key:Key.t -> data:'-> 'b option) -> 'b t
                          val compare_direct :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val equal :
                            ('-> '-> bool) -> 'a t -> 'a t -> bool
                          val keys : 'a t -> Key.t list
                          val data : 'a t -> 'a list
                          val to_alist : 'a t -> (Key.t * 'a) list
                          val validate :
                            name:(Key.t -> string) ->
                            'Core_kernel.Validate.check ->
                            'a t Core_kernel.Validate.check
                          val merge :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            'c t
                          val symmetric_diff :
                            'a t ->
                            'a t ->
                            data_equal:('-> '-> bool) ->
                            (Key.t *
                             [ `Left of 'a
                             | `Right of 'a
                             | `Unequal of 'a * 'a ])
                            Core_kernel.Sequence.t
                          val min_elt : 'a t -> (Key.t * 'a) option
                          val min_elt_exn : 'a t -> Key.t * 'a
                          val max_elt : 'a t -> (Key.t * 'a) option
                          val max_elt_exn : 'a t -> Key.t * 'a
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val exists : 'a t -> f:('-> bool) -> bool
                          val fold_range_inclusive :
                            'a t ->
                            min:Key.t ->
                            max:Key.t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val range_to_alist :
                            'a t ->
                            min:Key.t -> max:Key.t -> (Key.t * 'a) list
                          val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val rank : 'a t -> Key.t -> int option
                          val to_tree : 'a t -> 'a t
                          val to_sequence :
                            ?keys_in:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Key.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Key.t ] ->
                            'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                        end
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'Tree.t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'Tree.t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Set :
                    sig
                      module Elt :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                        end
                      module Tree :
                        sig
                          type t =
                              (Elt.t, Elt.comparator_witness)
                              Core_kernel.Core_set.Tree.t
                          val length : t -> int
                          val is_empty : t -> bool
                          val iter : t -> f:(Elt.t -> unit) -> unit
                          val fold :
                            t ->
                            init:'accum ->
                            f:('accum -> Elt.t -> 'accum) -> 'accum
                          val exists : t -> f:(Elt.t -> bool) -> bool
                          val for_all : t -> f:(Elt.t -> bool) -> bool
                          val count : t -> f:(Elt.t -> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            t -> f:(Elt.t -> 'sum) -> 'sum
                          val find : t -> f:(Elt.t -> bool) -> Elt.t option
                          val find_map :
                            t -> f:(Elt.t -> 'a option) -> 'a option
                          val to_list : t -> Elt.t list
                          val to_array : t -> Elt.t array
                          val invariants : t -> bool
                          val mem : t -> Elt.t -> bool
                          val add : t -> Elt.t -> t
                          val remove : t -> Elt.t -> t
                          val union : t -> t -> t
                          val inter : t -> t -> t
                          val diff : t -> t -> t
                          val compare_direct : t -> t -> int
                          val equal : t -> t -> bool
                          val subset : t -> t -> bool
                          val fold_until :
                            t ->
                            init:'->
                            f:('->
                               Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                            'b
                          val fold_right :
                            t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                          val iter2 :
                            t ->
                            t ->
                            f:([ `Both of Elt.t * Elt.t
                               | `Left of Elt.t
                               | `Right of Elt.t ] -> unit) ->
                            unit
                          val filter : t -> f:(Elt.t -> bool) -> t
                          val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                          val elements : t -> Elt.t list
                          val min_elt : t -> Elt.t option
                          val min_elt_exn : t -> Elt.t
                          val max_elt : t -> Elt.t option
                          val max_elt_exn : t -> Elt.t
                          val choose : t -> Elt.t option
                          val choose_exn : t -> Elt.t
                          val split : t -> Elt.t -> t * bool * t
                          val group_by :
                            t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                          val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                          val find_index : t -> int -> Elt.t option
                          val remove_index : t -> int -> t
                          val to_tree : t -> t
                          val to_sequence :
                            ?in_:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Elt.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Elt.t ] ->
                            t -> Elt.t Core_kernel.Sequence.t
                          val to_map :
                            t ->
                            f:(Elt.t -> 'data) ->
                            (Elt.t, 'data, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t
                          val empty : t
                          val singleton : Elt.t -> t
                          val union_list : t list -> t
                          val of_list : Elt.t list -> t
                          val of_array : Elt.t array -> t
                          val of_sorted_array :
                            Elt.t array -> t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked : Elt.t array -> t
                          val stable_dedup_list : Elt.t list -> Elt.t list
                          val map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t) -> t
                          val filter_map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t option) -> t
                          val of_tree : t -> t
                          val of_map_keys :
                            (Elt.t, 'a, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t -> t
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> Tree.t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : Tree.t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hashable : sig type t = t end
                  val hash : t -> int
                  val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
                  module Table :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Pooled_hashtbl :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Pooled_hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Hash_set :
                    sig
                      type elt = t
                      type 'a hash_set = 'Core_kernel.Hash_set.t
                      type t = elt hash_set
                      type 'a t_ = t
                      type 'a elt_ = elt
                      val create :
                        ('a, unit -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val of_list :
                        ('a, 'a elt_ list -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hash_queue :
                    sig
                      module Key :
                        sig
                          type t = t
                          val hash : t -> int
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type 'a t
                      val length : 'a t -> int
                      val is_empty : 'a t -> bool
                      val iter : 'a t -> f:('-> unit) -> unit
                      val fold :
                        'a t ->
                        init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                      val exists : 'a t -> f:('-> bool) -> bool
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val count : 'a t -> f:('-> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        'a t -> f:('-> 'sum) -> 'sum
                      val find : 'a t -> f:('-> bool) -> 'a option
                      val find_map : 'a t -> f:('-> 'b option) -> 'b option
                      val to_list : 'a t -> 'a list
                      val to_array : 'a t -> 'a array
                      val min_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val max_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val invariant : 'a t -> unit
                      val create : unit -> 'a t
                      val clear : 'a t -> unit
                      val mem : 'a t -> Key.t -> bool
                      val lookup : 'a t -> Key.t -> 'a option
                      val lookup_exn : 'a t -> Key.t -> 'a
                      val enqueue :
                        'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                      val enqueue_exn : 'a t -> Key.t -> '-> unit
                      val first : 'a t -> 'a option
                      val keys : 'a t -> Key.t list
                      val dequeue : 'a t -> 'a option
                      val dequeue_exn : 'a t -> 'a
                      val dequeue_with_key : 'a t -> (Key.t * 'a) option
                      val dequeue_with_key_exn : 'a t -> Key.t * 'a
                      val dequeue_all : 'a t -> f:('-> unit) -> unit
                      val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                      val remove_exn : 'a t -> Key.t -> unit
                      val replace :
                        'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                      val replace_exn : 'a t -> Key.t -> '-> unit
                      val iteri :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val foldi :
                        'a t ->
                        init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                    end
                  val pp : Format.formatter -> t -> unit
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_t : t Bin_prot.Type_class.t
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val of_json : Ezjsonm.t -> t
                  val to_json : t -> Ezjsonm.t
                  val of_raw : string -> t
                  val to_raw : t -> string
                  val of_bytes : Core_kernel.Std.Bigstring.t -> t
                  val of_bytes' : string -> t
                end
              module Value :
                sig
                  type key = key
                  type t = key IrminNode.t
                  val of_string : string -> t
                  val to_string : t -> string
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val ascending : t -> t -> int
                  val descending : t -> t -> int
                  val between : t -> low:t -> high:t -> bool
                  module Replace_polymorphic_compare :
                    sig
                      val ( >= ) : t -> t -> bool
                      val ( <= ) : t -> t -> bool
                      val ( = ) : t -> t -> bool
                      val ( > ) : t -> t -> bool
                      val ( < ) : t -> t -> bool
                      val ( <> ) : t -> t -> bool
                      val equal : t -> t -> bool
                      val compare : t -> t -> int
                      val min : t -> t -> t
                      val max : t -> t -> t
                      val _squelch_unused_module_warning_ : unit
                    end
                  type comparator_witness
                  val validate_lbound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_ubound :
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_bound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val comparator :
                    (t, comparator_witness) Core_kernel.Comparator.comparator
                  module Map :
                    sig
                      module Key :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                        end
                      module Tree :
                        sig
                          type 'a t =
                              (Key.t, 'a, Key.comparator_witness)
                              Core_kernel.Core_map.Tree.t
                          val empty : 'a t
                          val singleton : Key.t -> '-> 'a t
                          val of_alist :
                            (Key.t * 'a) list ->
                            [ `Duplicate_key of Key.t | `Ok of 'a t ]
                          val of_alist_or_error :
                            (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                          val of_alist_exn : (Key.t * 'a) list -> 'a t
                          val of_alist_multi : (Key.t * 'a) list -> 'a list t
                          val of_alist_fold :
                            (Key.t * 'a) list ->
                            init:'-> f:('-> '-> 'b) -> 'b t
                          val of_alist_reduce :
                            (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                          val of_sorted_array :
                            (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked :
                            (Key.t * 'a) array -> 'a t
                          val of_tree : 'a t -> 'a t
                          val invariants : 'a t -> bool
                          val is_empty : 'a t -> bool
                          val length : 'a t -> int
                          val add : 'a t -> key:Key.t -> data:'-> 'a t
                          val add_multi :
                            'a list t -> key:Key.t -> data:'-> 'a list t
                          val change :
                            'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                          val find : 'a t -> Key.t -> 'a option
                          val find_exn : 'a t -> Key.t -> 'a
                          val remove : 'a t -> Key.t -> 'a t
                          val mem : 'a t -> Key.t -> bool
                          val iter :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val iter2 :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               data:[ `Both of 'a * 'b
                                    | `Left of 'a
                                    | `Right of 'b ] ->
                               unit) ->
                            unit
                          val map : 'a t -> f:('-> 'b) -> 'b t
                          val mapi :
                            'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                          val fold :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val fold_right :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val filter :
                            'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                          val filter_map :
                            'a t -> f:('-> 'b option) -> 'b t
                          val filter_mapi :
                            'a t ->
                            f:(key:Key.t -> data:'-> 'b option) -> 'b t
                          val compare_direct :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val equal :
                            ('-> '-> bool) -> 'a t -> 'a t -> bool
                          val keys : 'a t -> Key.t list
                          val data : 'a t -> 'a list
                          val to_alist : 'a t -> (Key.t * 'a) list
                          val validate :
                            name:(Key.t -> string) ->
                            'Core_kernel.Validate.check ->
                            'a t Core_kernel.Validate.check
                          val merge :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            'c t
                          val symmetric_diff :
                            'a t ->
                            'a t ->
                            data_equal:('-> '-> bool) ->
                            (Key.t *
                             [ `Left of 'a
                             | `Right of 'a
                             | `Unequal of 'a * 'a ])
                            Core_kernel.Sequence.t
                          val min_elt : 'a t -> (Key.t * 'a) option
                          val min_elt_exn : 'a t -> Key.t * 'a
                          val max_elt : 'a t -> (Key.t * 'a) option
                          val max_elt_exn : 'a t -> Key.t * 'a
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val exists : 'a t -> f:('-> bool) -> bool
                          val fold_range_inclusive :
                            'a t ->
                            min:Key.t ->
                            max:Key.t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val range_to_alist :
                            'a t ->
                            min:Key.t -> max:Key.t -> (Key.t * 'a) list
                          val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val rank : 'a t -> Key.t -> int option
                          val to_tree : 'a t -> 'a t
                          val to_sequence :
                            ?keys_in:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Key.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Key.t ] ->
                            'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                        end
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'Tree.t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'Tree.t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Set :
                    sig
                      module Elt :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                        end
                      module Tree :
                        sig
                          type t =
                              (Elt.t, Elt.comparator_witness)
                              Core_kernel.Core_set.Tree.t
                          val length : t -> int
                          val is_empty : t -> bool
                          val iter : t -> f:(Elt.t -> unit) -> unit
                          val fold :
                            t ->
                            init:'accum ->
                            f:('accum -> Elt.t -> 'accum) -> 'accum
                          val exists : t -> f:(Elt.t -> bool) -> bool
                          val for_all : t -> f:(Elt.t -> bool) -> bool
                          val count : t -> f:(Elt.t -> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            t -> f:(Elt.t -> 'sum) -> 'sum
                          val find : t -> f:(Elt.t -> bool) -> Elt.t option
                          val find_map :
                            t -> f:(Elt.t -> 'a option) -> 'a option
                          val to_list : t -> Elt.t list
                          val to_array : t -> Elt.t array
                          val invariants : t -> bool
                          val mem : t -> Elt.t -> bool
                          val add : t -> Elt.t -> t
                          val remove : t -> Elt.t -> t
                          val union : t -> t -> t
                          val inter : t -> t -> t
                          val diff : t -> t -> t
                          val compare_direct : t -> t -> int
                          val equal : t -> t -> bool
                          val subset : t -> t -> bool
                          val fold_until :
                            t ->
                            init:'->
                            f:('->
                               Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                            'b
                          val fold_right :
                            t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                          val iter2 :
                            t ->
                            t ->
                            f:([ `Both of Elt.t * Elt.t
                               | `Left of Elt.t
                               | `Right of Elt.t ] -> unit) ->
                            unit
                          val filter : t -> f:(Elt.t -> bool) -> t
                          val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                          val elements : t -> Elt.t list
                          val min_elt : t -> Elt.t option
                          val min_elt_exn : t -> Elt.t
                          val max_elt : t -> Elt.t option
                          val max_elt_exn : t -> Elt.t
                          val choose : t -> Elt.t option
                          val choose_exn : t -> Elt.t
                          val split : t -> Elt.t -> t * bool * t
                          val group_by :
                            t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                          val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                          val find_index : t -> int -> Elt.t option
                          val remove_index : t -> int -> t
                          val to_tree : t -> t
                          val to_sequence :
                            ?in_:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Elt.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Elt.t ] ->
                            t -> Elt.t Core_kernel.Sequence.t
                          val to_map :
                            t ->
                            f:(Elt.t -> 'data) ->
                            (Elt.t, 'data, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t
                          val empty : t
                          val singleton : Elt.t -> t
                          val union_list : t list -> t
                          val of_list : Elt.t list -> t
                          val of_array : Elt.t array -> t
                          val of_sorted_array :
                            Elt.t array -> t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked : Elt.t array -> t
                          val stable_dedup_list : Elt.t list -> Elt.t list
                          val map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t) -> t
                          val filter_map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t option) -> t
                          val of_tree : t -> t
                          val of_map_keys :
                            (Elt.t, 'a, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t -> t
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> Tree.t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : Tree.t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hashable : sig type t = t end
                  val hash : t -> int
                  val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
                  module Table :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Pooled_hashtbl :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Pooled_hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Hash_set :
                    sig
                      type elt = t
                      type 'a hash_set = 'Core_kernel.Hash_set.t
                      type t = elt hash_set
                      type 'a t_ = t
                      type 'a elt_ = elt
                      val create :
                        ('a, unit -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val of_list :
                        ('a, 'a elt_ list -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hash_queue :
                    sig
                      module Key :
                        sig
                          type t = t
                          val hash : t -> int
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type 'a t
                      val length : 'a t -> int
                      val is_empty : 'a t -> bool
                      val iter : 'a t -> f:('-> unit) -> unit
                      val fold :
                        'a t ->
                        init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                      val exists : 'a t -> f:('-> bool) -> bool
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val count : 'a t -> f:('-> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        'a t -> f:('-> 'sum) -> 'sum
                      val find : 'a t -> f:('-> bool) -> 'a option
                      val find_map : 'a t -> f:('-> 'b option) -> 'b option
                      val to_list : 'a t -> 'a list
                      val to_array : 'a t -> 'a array
                      val min_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val max_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val invariant : 'a t -> unit
                      val create : unit -> 'a t
                      val clear : 'a t -> unit
                      val mem : 'a t -> Key.t -> bool
                      val lookup : 'a t -> Key.t -> 'a option
                      val lookup_exn : 'a t -> Key.t -> 'a
                      val enqueue :
                        'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                      val enqueue_exn : 'a t -> Key.t -> '-> unit
                      val first : 'a t -> 'a option
                      val keys : 'a t -> Key.t list
                      val dequeue : 'a t -> 'a option
                      val dequeue_exn : 'a t -> 'a
                      val dequeue_with_key : 'a t -> (Key.t * 'a) option
                      val dequeue_with_key_exn : 'a t -> Key.t * 'a
                      val dequeue_all : 'a t -> f:('-> unit) -> unit
                      val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                      val remove_exn : 'a t -> Key.t -> unit
                      val replace :
                        'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                      val replace_exn : 'a t -> Key.t -> '-> unit
                      val iteri :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val foldi :
                        'a t ->
                        init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                    end
                  val pp : Format.formatter -> t -> unit
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_t : t Bin_prot.Type_class.t
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val of_json : Ezjsonm.t -> t
                  val to_json : t -> Ezjsonm.t
                  val merge : t IrminMerge.t
                end
            end
          module Commit :
            sig
              type key = key
              type value = key IrminCommit.t
              type t
              val create : unit -> t Lwt.t
              val read : t -> key -> value option Lwt.t
              val read_exn : t -> key -> value Lwt.t
              val mem : t -> key -> bool Lwt.t
              val dump : t -> (key * value) list Lwt.t
              val add : t -> value -> key Lwt.t
              type node = key IrminNode.t
              val commit :
                t ->
                IrminCommit.origin ->
                ?node:node -> parents:value list -> (key * value) Lwt.t
              val node : t -> value -> node Lwt.t option
              val parents : t -> value -> value Lwt.t list
              val merge : t -> key IrminMerge.t
              val find_common_ancestor : t -> key -> key -> key option Lwt.t
              val find_common_ancestor_exn : t -> key -> key -> key Lwt.t
              val list : t -> ?depth:int -> key list -> key list Lwt.t
              module Key :
                sig
                  type t = key
                  val of_string : string -> t
                  val to_string : t -> string
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val ascending : t -> t -> int
                  val descending : t -> t -> int
                  val between : t -> low:t -> high:t -> bool
                  module Replace_polymorphic_compare :
                    sig
                      val ( >= ) : t -> t -> bool
                      val ( <= ) : t -> t -> bool
                      val ( = ) : t -> t -> bool
                      val ( > ) : t -> t -> bool
                      val ( < ) : t -> t -> bool
                      val ( <> ) : t -> t -> bool
                      val equal : t -> t -> bool
                      val compare : t -> t -> int
                      val min : t -> t -> t
                      val max : t -> t -> t
                      val _squelch_unused_module_warning_ : unit
                    end
                  type comparator_witness
                  val validate_lbound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_ubound :
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_bound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val comparator :
                    (t, comparator_witness) Core_kernel.Comparator.comparator
                  module Map :
                    sig
                      module Key :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                        end
                      module Tree :
                        sig
                          type 'a t =
                              (Key.t, 'a, Key.comparator_witness)
                              Core_kernel.Core_map.Tree.t
                          val empty : 'a t
                          val singleton : Key.t -> '-> 'a t
                          val of_alist :
                            (Key.t * 'a) list ->
                            [ `Duplicate_key of Key.t | `Ok of 'a t ]
                          val of_alist_or_error :
                            (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                          val of_alist_exn : (Key.t * 'a) list -> 'a t
                          val of_alist_multi : (Key.t * 'a) list -> 'a list t
                          val of_alist_fold :
                            (Key.t * 'a) list ->
                            init:'-> f:('-> '-> 'b) -> 'b t
                          val of_alist_reduce :
                            (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                          val of_sorted_array :
                            (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked :
                            (Key.t * 'a) array -> 'a t
                          val of_tree : 'a t -> 'a t
                          val invariants : 'a t -> bool
                          val is_empty : 'a t -> bool
                          val length : 'a t -> int
                          val add : 'a t -> key:Key.t -> data:'-> 'a t
                          val add_multi :
                            'a list t -> key:Key.t -> data:'-> 'a list t
                          val change :
                            'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                          val find : 'a t -> Key.t -> 'a option
                          val find_exn : 'a t -> Key.t -> 'a
                          val remove : 'a t -> Key.t -> 'a t
                          val mem : 'a t -> Key.t -> bool
                          val iter :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val iter2 :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               data:[ `Both of 'a * 'b
                                    | `Left of 'a
                                    | `Right of 'b ] ->
                               unit) ->
                            unit
                          val map : 'a t -> f:('-> 'b) -> 'b t
                          val mapi :
                            'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                          val fold :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val fold_right :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val filter :
                            'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                          val filter_map :
                            'a t -> f:('-> 'b option) -> 'b t
                          val filter_mapi :
                            'a t ->
                            f:(key:Key.t -> data:'-> 'b option) -> 'b t
                          val compare_direct :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val equal :
                            ('-> '-> bool) -> 'a t -> 'a t -> bool
                          val keys : 'a t -> Key.t list
                          val data : 'a t -> 'a list
                          val to_alist : 'a t -> (Key.t * 'a) list
                          val validate :
                            name:(Key.t -> string) ->
                            'Core_kernel.Validate.check ->
                            'a t Core_kernel.Validate.check
                          val merge :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            'c t
                          val symmetric_diff :
                            'a t ->
                            'a t ->
                            data_equal:('-> '-> bool) ->
                            (Key.t *
                             [ `Left of 'a
                             | `Right of 'a
                             | `Unequal of 'a * 'a ])
                            Core_kernel.Sequence.t
                          val min_elt : 'a t -> (Key.t * 'a) option
                          val min_elt_exn : 'a t -> Key.t * 'a
                          val max_elt : 'a t -> (Key.t * 'a) option
                          val max_elt_exn : 'a t -> Key.t * 'a
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val exists : 'a t -> f:('-> bool) -> bool
                          val fold_range_inclusive :
                            'a t ->
                            min:Key.t ->
                            max:Key.t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val range_to_alist :
                            'a t ->
                            min:Key.t -> max:Key.t -> (Key.t * 'a) list
                          val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val rank : 'a t -> Key.t -> int option
                          val to_tree : 'a t -> 'a t
                          val to_sequence :
                            ?keys_in:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Key.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Key.t ] ->
                            'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                        end
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'Tree.t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'Tree.t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Set :
                    sig
                      module Elt :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                        end
                      module Tree :
                        sig
                          type t =
                              (Elt.t, Elt.comparator_witness)
                              Core_kernel.Core_set.Tree.t
                          val length : t -> int
                          val is_empty : t -> bool
                          val iter : t -> f:(Elt.t -> unit) -> unit
                          val fold :
                            t ->
                            init:'accum ->
                            f:('accum -> Elt.t -> 'accum) -> 'accum
                          val exists : t -> f:(Elt.t -> bool) -> bool
                          val for_all : t -> f:(Elt.t -> bool) -> bool
                          val count : t -> f:(Elt.t -> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            t -> f:(Elt.t -> 'sum) -> 'sum
                          val find : t -> f:(Elt.t -> bool) -> Elt.t option
                          val find_map :
                            t -> f:(Elt.t -> 'a option) -> 'a option
                          val to_list : t -> Elt.t list
                          val to_array : t -> Elt.t array
                          val invariants : t -> bool
                          val mem : t -> Elt.t -> bool
                          val add : t -> Elt.t -> t
                          val remove : t -> Elt.t -> t
                          val union : t -> t -> t
                          val inter : t -> t -> t
                          val diff : t -> t -> t
                          val compare_direct : t -> t -> int
                          val equal : t -> t -> bool
                          val subset : t -> t -> bool
                          val fold_until :
                            t ->
                            init:'->
                            f:('->
                               Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                            'b
                          val fold_right :
                            t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                          val iter2 :
                            t ->
                            t ->
                            f:([ `Both of Elt.t * Elt.t
                               | `Left of Elt.t
                               | `Right of Elt.t ] -> unit) ->
                            unit
                          val filter : t -> f:(Elt.t -> bool) -> t
                          val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                          val elements : t -> Elt.t list
                          val min_elt : t -> Elt.t option
                          val min_elt_exn : t -> Elt.t
                          val max_elt : t -> Elt.t option
                          val max_elt_exn : t -> Elt.t
                          val choose : t -> Elt.t option
                          val choose_exn : t -> Elt.t
                          val split : t -> Elt.t -> t * bool * t
                          val group_by :
                            t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                          val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                          val find_index : t -> int -> Elt.t option
                          val remove_index : t -> int -> t
                          val to_tree : t -> t
                          val to_sequence :
                            ?in_:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Elt.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Elt.t ] ->
                            t -> Elt.t Core_kernel.Sequence.t
                          val to_map :
                            t ->
                            f:(Elt.t -> 'data) ->
                            (Elt.t, 'data, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t
                          val empty : t
                          val singleton : Elt.t -> t
                          val union_list : t list -> t
                          val of_list : Elt.t list -> t
                          val of_array : Elt.t array -> t
                          val of_sorted_array :
                            Elt.t array -> t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked : Elt.t array -> t
                          val stable_dedup_list : Elt.t list -> Elt.t list
                          val map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t) -> t
                          val filter_map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t option) -> t
                          val of_tree : t -> t
                          val of_map_keys :
                            (Elt.t, 'a, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t -> t
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> Tree.t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : Tree.t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hashable : sig type t = t end
                  val hash : t -> int
                  val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
                  module Table :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Pooled_hashtbl :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Pooled_hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Hash_set :
                    sig
                      type elt = t
                      type 'a hash_set = 'Core_kernel.Hash_set.t
                      type t = elt hash_set
                      type 'a t_ = t
                      type 'a elt_ = elt
                      val create :
                        ('a, unit -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val of_list :
                        ('a, 'a elt_ list -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hash_queue :
                    sig
                      module Key :
                        sig
                          type t = t
                          val hash : t -> int
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type 'a t
                      val length : 'a t -> int
                      val is_empty : 'a t -> bool
                      val iter : 'a t -> f:('-> unit) -> unit
                      val fold :
                        'a t ->
                        init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                      val exists : 'a t -> f:('-> bool) -> bool
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val count : 'a t -> f:('-> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        'a t -> f:('-> 'sum) -> 'sum
                      val find : 'a t -> f:('-> bool) -> 'a option
                      val find_map : 'a t -> f:('-> 'b option) -> 'b option
                      val to_list : 'a t -> 'a list
                      val to_array : 'a t -> 'a array
                      val min_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val max_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val invariant : 'a t -> unit
                      val create : unit -> 'a t
                      val clear : 'a t -> unit
                      val mem : 'a t -> Key.t -> bool
                      val lookup : 'a t -> Key.t -> 'a option
                      val lookup_exn : 'a t -> Key.t -> 'a
                      val enqueue :
                        'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                      val enqueue_exn : 'a t -> Key.t -> '-> unit
                      val first : 'a t -> 'a option
                      val keys : 'a t -> Key.t list
                      val dequeue : 'a t -> 'a option
                      val dequeue_exn : 'a t -> 'a
                      val dequeue_with_key : 'a t -> (Key.t * 'a) option
                      val dequeue_with_key_exn : 'a t -> Key.t * 'a
                      val dequeue_all : 'a t -> f:('-> unit) -> unit
                      val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                      val remove_exn : 'a t -> Key.t -> unit
                      val replace :
                        'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                      val replace_exn : 'a t -> Key.t -> '-> unit
                      val iteri :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val foldi :
                        'a t ->
                        init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                    end
                  val pp : Format.formatter -> t -> unit
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_t : t Bin_prot.Type_class.t
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val of_json : Ezjsonm.t -> t
                  val to_json : t -> Ezjsonm.t
                  val of_raw : string -> t
                  val to_raw : t -> string
                  val of_bytes : Core_kernel.Std.Bigstring.t -> t
                  val of_bytes' : string -> t
                end
              module Value :
                sig
                  type key = key
                  type t = key IrminCommit.t
                  val of_string : string -> t
                  val to_string : t -> string
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val ascending : t -> t -> int
                  val descending : t -> t -> int
                  val between : t -> low:t -> high:t -> bool
                  module Replace_polymorphic_compare :
                    sig
                      val ( >= ) : t -> t -> bool
                      val ( <= ) : t -> t -> bool
                      val ( = ) : t -> t -> bool
                      val ( > ) : t -> t -> bool
                      val ( < ) : t -> t -> bool
                      val ( <> ) : t -> t -> bool
                      val equal : t -> t -> bool
                      val compare : t -> t -> int
                      val min : t -> t -> t
                      val max : t -> t -> t
                      val _squelch_unused_module_warning_ : unit
                    end
                  type comparator_witness
                  val validate_lbound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_ubound :
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_bound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val comparator :
                    (t, comparator_witness) Core_kernel.Comparator.comparator
                  module Map :
                    sig
                      module Key :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                        end
                      module Tree :
                        sig
                          type 'a t =
                              (Key.t, 'a, Key.comparator_witness)
                              Core_kernel.Core_map.Tree.t
                          val empty : 'a t
                          val singleton : Key.t -> '-> 'a t
                          val of_alist :
                            (Key.t * 'a) list ->
                            [ `Duplicate_key of Key.t | `Ok of 'a t ]
                          val of_alist_or_error :
                            (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                          val of_alist_exn : (Key.t * 'a) list -> 'a t
                          val of_alist_multi : (Key.t * 'a) list -> 'a list t
                          val of_alist_fold :
                            (Key.t * 'a) list ->
                            init:'-> f:('-> '-> 'b) -> 'b t
                          val of_alist_reduce :
                            (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                          val of_sorted_array :
                            (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked :
                            (Key.t * 'a) array -> 'a t
                          val of_tree : 'a t -> 'a t
                          val invariants : 'a t -> bool
                          val is_empty : 'a t -> bool
                          val length : 'a t -> int
                          val add : 'a t -> key:Key.t -> data:'-> 'a t
                          val add_multi :
                            'a list t -> key:Key.t -> data:'-> 'a list t
                          val change :
                            'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                          val find : 'a t -> Key.t -> 'a option
                          val find_exn : 'a t -> Key.t -> 'a
                          val remove : 'a t -> Key.t -> 'a t
                          val mem : 'a t -> Key.t -> bool
                          val iter :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val iter2 :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               data:[ `Both of 'a * 'b
                                    | `Left of 'a
                                    | `Right of 'b ] ->
                               unit) ->
                            unit
                          val map : 'a t -> f:('-> 'b) -> 'b t
                          val mapi :
                            'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                          val fold :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val fold_right :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val filter :
                            'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                          val filter_map :
                            'a t -> f:('-> 'b option) -> 'b t
                          val filter_mapi :
                            'a t ->
                            f:(key:Key.t -> data:'-> 'b option) -> 'b t
                          val compare_direct :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val equal :
                            ('-> '-> bool) -> 'a t -> 'a t -> bool
                          val keys : 'a t -> Key.t list
                          val data : 'a t -> 'a list
                          val to_alist : 'a t -> (Key.t * 'a) list
                          val validate :
                            name:(Key.t -> string) ->
                            'Core_kernel.Validate.check ->
                            'a t Core_kernel.Validate.check
                          val merge :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            'c t
                          val symmetric_diff :
                            'a t ->
                            'a t ->
                            data_equal:('-> '-> bool) ->
                            (Key.t *
                             [ `Left of 'a
                             | `Right of 'a
                             | `Unequal of 'a * 'a ])
                            Core_kernel.Sequence.t
                          val min_elt : 'a t -> (Key.t * 'a) option
                          val min_elt_exn : 'a t -> Key.t * 'a
                          val max_elt : 'a t -> (Key.t * 'a) option
                          val max_elt_exn : 'a t -> Key.t * 'a
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val exists : 'a t -> f:('-> bool) -> bool
                          val fold_range_inclusive :
                            'a t ->
                            min:Key.t ->
                            max:Key.t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val range_to_alist :
                            'a t ->
                            min:Key.t -> max:Key.t -> (Key.t * 'a) list
                          val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val rank : 'a t -> Key.t -> int option
                          val to_tree : 'a t -> 'a t
                          val to_sequence :
                            ?keys_in:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Key.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Key.t ] ->
                            'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                        end
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'Tree.t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'Tree.t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Set :
                    sig
                      module Elt :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                        end
                      module Tree :
                        sig
                          type t =
                              (Elt.t, Elt.comparator_witness)
                              Core_kernel.Core_set.Tree.t
                          val length : t -> int
                          val is_empty : t -> bool
                          val iter : t -> f:(Elt.t -> unit) -> unit
                          val fold :
                            t ->
                            init:'accum ->
                            f:('accum -> Elt.t -> 'accum) -> 'accum
                          val exists : t -> f:(Elt.t -> bool) -> bool
                          val for_all : t -> f:(Elt.t -> bool) -> bool
                          val count : t -> f:(Elt.t -> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            t -> f:(Elt.t -> 'sum) -> 'sum
                          val find : t -> f:(Elt.t -> bool) -> Elt.t option
                          val find_map :
                            t -> f:(Elt.t -> 'a option) -> 'a option
                          val to_list : t -> Elt.t list
                          val to_array : t -> Elt.t array
                          val invariants : t -> bool
                          val mem : t -> Elt.t -> bool
                          val add : t -> Elt.t -> t
                          val remove : t -> Elt.t -> t
                          val union : t -> t -> t
                          val inter : t -> t -> t
                          val diff : t -> t -> t
                          val compare_direct : t -> t -> int
                          val equal : t -> t -> bool
                          val subset : t -> t -> bool
                          val fold_until :
                            t ->
                            init:'->
                            f:('->
                               Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                            'b
                          val fold_right :
                            t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                          val iter2 :
                            t ->
                            t ->
                            f:([ `Both of Elt.t * Elt.t
                               | `Left of Elt.t
                               | `Right of Elt.t ] -> unit) ->
                            unit
                          val filter : t -> f:(Elt.t -> bool) -> t
                          val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                          val elements : t -> Elt.t list
                          val min_elt : t -> Elt.t option
                          val min_elt_exn : t -> Elt.t
                          val max_elt : t -> Elt.t option
                          val max_elt_exn : t -> Elt.t
                          val choose : t -> Elt.t option
                          val choose_exn : t -> Elt.t
                          val split : t -> Elt.t -> t * bool * t
                          val group_by :
                            t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                          val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                          val find_index : t -> int -> Elt.t option
                          val remove_index : t -> int -> t
                          val to_tree : t -> t
                          val to_sequence :
                            ?in_:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Elt.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Elt.t ] ->
                            t -> Elt.t Core_kernel.Sequence.t
                          val to_map :
                            t ->
                            f:(Elt.t -> 'data) ->
                            (Elt.t, 'data, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t
                          val empty : t
                          val singleton : Elt.t -> t
                          val union_list : t list -> t
                          val of_list : Elt.t list -> t
                          val of_array : Elt.t array -> t
                          val of_sorted_array :
                            Elt.t array -> t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked : Elt.t array -> t
                          val stable_dedup_list : Elt.t list -> Elt.t list
                          val map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t) -> t
                          val filter_map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t option) -> t
                          val of_tree : t -> t
                          val of_map_keys :
                            (Elt.t, 'a, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t -> t
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> Tree.t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : Tree.t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hashable : sig type t = t end
                  val hash : t -> int
                  val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
                  module Table :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Pooled_hashtbl :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Pooled_hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Hash_set :
                    sig
                      type elt = t
                      type 'a hash_set = 'Core_kernel.Hash_set.t
                      type t = elt hash_set
                      type 'a t_ = t
                      type 'a elt_ = elt
                      val create :
                        ('a, unit -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val of_list :
                        ('a, 'a elt_ list -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hash_queue :
                    sig
                      module Key :
                        sig
                          type t = t
                          val hash : t -> int
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type 'a t
                      val length : 'a t -> int
                      val is_empty : 'a t -> bool
                      val iter : 'a t -> f:('-> unit) -> unit
                      val fold :
                        'a t ->
                        init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                      val exists : 'a t -> f:('-> bool) -> bool
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val count : 'a t -> f:('-> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        'a t -> f:('-> 'sum) -> 'sum
                      val find : 'a t -> f:('-> bool) -> 'a option
                      val find_map : 'a t -> f:('-> 'b option) -> 'b option
                      val to_list : 'a t -> 'a list
                      val to_array : 'a t -> 'a array
                      val min_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val max_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val invariant : 'a t -> unit
                      val create : unit -> 'a t
                      val clear : 'a t -> unit
                      val mem : 'a t -> Key.t -> bool
                      val lookup : 'a t -> Key.t -> 'a option
                      val lookup_exn : 'a t -> Key.t -> 'a
                      val enqueue :
                        'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                      val enqueue_exn : 'a t -> Key.t -> '-> unit
                      val first : 'a t -> 'a option
                      val keys : 'a t -> Key.t list
                      val dequeue : 'a t -> 'a option
                      val dequeue_exn : 'a t -> 'a
                      val dequeue_with_key : 'a t -> (Key.t * 'a) option
                      val dequeue_with_key_exn : 'a t -> Key.t * 'a
                      val dequeue_all : 'a t -> f:('-> unit) -> unit
                      val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                      val remove_exn : 'a t -> Key.t -> unit
                      val replace :
                        'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                      val replace_exn : 'a t -> Key.t -> '-> unit
                      val iteri :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val foldi :
                        'a t ->
                        init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                    end
                  val pp : Format.formatter -> t -> unit
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_t : t Bin_prot.Type_class.t
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val of_json : Ezjsonm.t -> t
                  val to_json : t -> Ezjsonm.t
                  val merge : t IrminMerge.t
                end
            end
          val contents_t : t -> Contents.t
          val node_t : t -> Node.t
          val commit_t : t -> Commit.t
          val merge : t -> key IrminMerge.t
          module Key :
            sig
              type t = key
              val of_string : string -> t
              val to_string : t -> string
              val ( >= ) : t -> t -> bool
              val ( <= ) : t -> t -> bool
              val ( = ) : t -> t -> bool
              val ( > ) : t -> t -> bool
              val ( < ) : t -> t -> bool
              val ( <> ) : t -> t -> bool
              val equal : t -> t -> bool
              val compare : t -> t -> int
              val min : t -> t -> t
              val max : t -> t -> t
              val ascending : t -> t -> int
              val descending : t -> t -> int
              val between : t -> low:t -> high:t -> bool
              module Replace_polymorphic_compare :
                sig
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val _squelch_unused_module_warning_ : unit
                end
              type comparator_witness
              val validate_lbound :
                min:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val validate_ubound :
                max:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val validate_bound :
                min:t Core_kernel.Comparable_intf.bound ->
                max:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val comparator :
                (t, comparator_witness) Core_kernel.Comparator.comparator
              module Map :
                sig
                  module Key :
                    sig
                      type t = t
                      type comparator_witness = comparator_witness
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                    end
                  module Tree :
                    sig
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.Tree.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'a t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'a t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                    end
                  type 'a t =
                      (Key.t, 'a, Key.comparator_witness)
                      Core_kernel.Core_map.t
                  val empty : 'a t
                  val singleton : Key.t -> '-> 'a t
                  val of_alist :
                    (Key.t * 'a) list ->
                    [ `Duplicate_key of Key.t | `Ok of 'a t ]
                  val of_alist_or_error :
                    (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                  val of_alist_exn : (Key.t * 'a) list -> 'a t
                  val of_alist_multi : (Key.t * 'a) list -> 'a list t
                  val of_alist_fold :
                    (Key.t * 'a) list ->
                    init:'-> f:('-> '-> 'b) -> 'b t
                  val of_alist_reduce :
                    (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                  val of_sorted_array :
                    (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : (Key.t * 'a) array -> 'a t
                  val of_tree : 'Tree.t -> 'a t
                  val invariants : 'a t -> bool
                  val is_empty : 'a t -> bool
                  val length : 'a t -> int
                  val add : 'a t -> key:Key.t -> data:'-> 'a t
                  val add_multi :
                    'a list t -> key:Key.t -> data:'-> 'a list t
                  val change :
                    'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                  val find : 'a t -> Key.t -> 'a option
                  val find_exn : 'a t -> Key.t -> 'a
                  val remove : 'a t -> Key.t -> 'a t
                  val mem : 'a t -> Key.t -> bool
                  val iter : 'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                  val iter2 :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       data:[ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       unit) ->
                    unit
                  val map : 'a t -> f:('-> 'b) -> 'b t
                  val mapi : 'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                  val fold :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val fold_right :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val filter :
                    'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                  val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                  val filter_mapi :
                    'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                  val compare_direct :
                    ('-> '-> int) -> 'a t -> 'a t -> int
                  val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                  val keys : 'a t -> Key.t list
                  val data : 'a t -> 'a list
                  val to_alist : 'a t -> (Key.t * 'a) list
                  val validate :
                    name:(Key.t -> string) ->
                    'Core_kernel.Validate.check ->
                    'a t Core_kernel.Validate.check
                  val merge :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       'c option) ->
                    'c t
                  val symmetric_diff :
                    'a t ->
                    'a t ->
                    data_equal:('-> '-> bool) ->
                    (Key.t *
                     [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                    Core_kernel.Sequence.t
                  val min_elt : 'a t -> (Key.t * 'a) option
                  val min_elt_exn : 'a t -> Key.t * 'a
                  val max_elt : 'a t -> (Key.t * 'a) option
                  val max_elt_exn : 'a t -> Key.t * 'a
                  val for_all : 'a t -> f:('-> bool) -> bool
                  val exists : 'a t -> f:('-> bool) -> bool
                  val fold_range_inclusive :
                    'a t ->
                    min:Key.t ->
                    max:Key.t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val range_to_alist :
                    'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                  val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val rank : 'a t -> Key.t -> int option
                  val to_tree : 'a t -> 'Tree.t
                  val to_sequence :
                    ?keys_in:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Key.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Key.t ] ->
                    'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                  val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Set :
                sig
                  module Elt :
                    sig
                      type t = t
                      type comparator_witness = comparator_witness
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                    end
                  module Tree :
                    sig
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.Tree.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.Tree.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.Tree.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                    end
                  type t =
                      (Elt.t, Elt.comparator_witness) Core_kernel.Core_set.t
                  val length : t -> int
                  val is_empty : t -> bool
                  val iter : t -> f:(Elt.t -> unit) -> unit
                  val fold :
                    t ->
                    init:'accum -> f:('accum -> Elt.t -> 'accum) -> 'accum
                  val exists : t -> f:(Elt.t -> bool) -> bool
                  val for_all : t -> f:(Elt.t -> bool) -> bool
                  val count : t -> f:(Elt.t -> bool) -> int
                  val sum :
                    (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                    t -> f:(Elt.t -> 'sum) -> 'sum
                  val find : t -> f:(Elt.t -> bool) -> Elt.t option
                  val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                  val to_list : t -> Elt.t list
                  val to_array : t -> Elt.t array
                  val invariants : t -> bool
                  val mem : t -> Elt.t -> bool
                  val add : t -> Elt.t -> t
                  val remove : t -> Elt.t -> t
                  val union : t -> t -> t
                  val inter : t -> t -> t
                  val diff : t -> t -> t
                  val compare_direct : t -> t -> int
                  val equal : t -> t -> bool
                  val subset : t -> t -> bool
                  val fold_until :
                    t ->
                    init:'->
                    f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                    'b
                  val fold_right :
                    t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                  val iter2 :
                    t ->
                    t ->
                    f:([ `Both of Elt.t * Elt.t
                       | `Left of Elt.t
                       | `Right of Elt.t ] -> unit) ->
                    unit
                  val filter : t -> f:(Elt.t -> bool) -> t
                  val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                  val elements : t -> Elt.t list
                  val min_elt : t -> Elt.t option
                  val min_elt_exn : t -> Elt.t
                  val max_elt : t -> Elt.t option
                  val max_elt_exn : t -> Elt.t
                  val choose : t -> Elt.t option
                  val choose_exn : t -> Elt.t
                  val split : t -> Elt.t -> t * bool * t
                  val group_by :
                    t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                  val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                  val find_index : t -> int -> Elt.t option
                  val remove_index : t -> int -> t
                  val to_tree : t -> Tree.t
                  val to_sequence :
                    ?in_:[ `Decreasing_order
                         | `Decreasing_order_less_than_or_equal_to of Elt.t
                         | `Increasing_order
                         | `Increasing_order_greater_than_or_equal_to of
                             Elt.t ] ->
                    t -> Elt.t Core_kernel.Sequence.t
                  val to_map :
                    t ->
                    f:(Elt.t -> 'data) ->
                    (Elt.t, 'data, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t
                  val empty : t
                  val singleton : Elt.t -> t
                  val union_list : t list -> t
                  val of_list : Elt.t list -> t
                  val of_array : Elt.t array -> t
                  val of_sorted_array :
                    Elt.t array -> t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : Elt.t array -> t
                  val stable_dedup_list : Elt.t list -> Elt.t list
                  val map :
                    ('a, 'b) Core_kernel.Core_set.t -> f:('-> Elt.t) -> t
                  val filter_map :
                    ('a, 'b) Core_kernel.Core_set.t ->
                    f:('-> Elt.t option) -> t
                  val of_tree : Tree.t -> t
                  val of_map_keys :
                    (Elt.t, 'a, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t -> t
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val compare : t -> t -> int
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_t : t Bin_prot.Type_class.t
                end
              module Hashable : sig type t = t end
              val hash : t -> int
              val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
              module Table :
                sig
                  type key = t
                  type ('a, 'b) hashtbl =
                      ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                  type 'b t = (key, 'b) hashtbl
                  type ('a, 'b) t_ = 'b t
                  type 'a key_ = key
                  val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
                  val create :
                    ('a key_, 'b, unit -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_report_all_dups :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_or_error :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     ('a, 'b) t_ Core_kernel.Or_error.t)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_exn :
                    ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_multi :
                    ('a key_, 'b list,
                     ('a key_ * 'b) list -> ('a, 'b list) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_mapped :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key_exn :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val group :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                  val clear : ('a, 'b) t_ -> unit
                  val copy : ('a, 'b) t_ -> ('a, 'b) t_
                  val invariant : ('a, 'b) t_ -> unit
                  val fold :
                    ('a, 'b) t_ ->
                    init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                  val iter :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
                  val existsi :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val for_alli :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val length : ('a, 'b) t_ -> int
                  val is_empty : ('a, 'b) t_ -> bool
                  val mem : ('a, 'b) t_ -> 'a key_ -> bool
                  val remove : ('a, 'b) t_ -> 'a key_ -> unit
                  val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                  val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val add :
                    ('a, 'b) t_ ->
                    key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                  val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val change :
                    ('a, 'b) t_ ->
                    'a key_ -> ('b option -> 'b option) -> unit
                  val add_multi :
                    ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                  val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                  val map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                  val filteri :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                  val partition_map :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:('-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_mapi :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:(key:'a key_ ->
                         data:'-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_tf :
                    ('a, 'b) t_ ->
                    f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                  val partitioni_tf :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) ->
                    ('a, 'b) t_ * ('a, 'b) t_
                  val find_or_add :
                    ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                  val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                  val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                  val merge :
                    ('c,
                     ('k, 'a) t_ ->
                     ('k, 'b) t_ ->
                     f:(key:'k key_ ->
                        [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                        'c option) ->
                     ('k, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val merge_into :
                    f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                    src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                  val keys : ('a, 'b) t_ -> 'a key_ list
                  val data : ('a, 'b) t_ -> 'b list
                  val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
                  val filteri_inplace :
                    ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                  val equal :
                    ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
                  val similar :
                    ('a, 'b1) t_ ->
                    ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                  val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                  val validate :
                    name:('a key_ -> string) ->
                    'Core_kernel.Validate.check ->
                    ('a, 'b) t_ Core_kernel.Validate.check
                  val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Pooled_hashtbl :
                sig
                  type key = t
                  type ('a, 'b) hashtbl =
                      ('a, 'b) Core_kernel.Pooled_hashtbl.t
                  type 'b t = (key, 'b) hashtbl
                  type ('a, 'b) t_ = 'b t
                  type 'a key_ = key
                  val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
                  val create :
                    ('a key_, 'b, unit -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_report_all_dups :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_or_error :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     ('a, 'b) t_ Core_kernel.Or_error.t)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_exn :
                    ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_multi :
                    ('a key_, 'b list,
                     ('a key_ * 'b) list -> ('a, 'b list) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_mapped :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key_exn :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val group :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                  val clear : ('a, 'b) t_ -> unit
                  val copy : ('a, 'b) t_ -> ('a, 'b) t_
                  val invariant : ('a, 'b) t_ -> unit
                  val fold :
                    ('a, 'b) t_ ->
                    init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                  val iter :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
                  val existsi :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val for_alli :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val length : ('a, 'b) t_ -> int
                  val is_empty : ('a, 'b) t_ -> bool
                  val mem : ('a, 'b) t_ -> 'a key_ -> bool
                  val remove : ('a, 'b) t_ -> 'a key_ -> unit
                  val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                  val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val add :
                    ('a, 'b) t_ ->
                    key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                  val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val change :
                    ('a, 'b) t_ ->
                    'a key_ -> ('b option -> 'b option) -> unit
                  val add_multi :
                    ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                  val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                  val map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                  val filteri :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                  val partition_map :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:('-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_mapi :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:(key:'a key_ ->
                         data:'-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_tf :
                    ('a, 'b) t_ ->
                    f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                  val partitioni_tf :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) ->
                    ('a, 'b) t_ * ('a, 'b) t_
                  val find_or_add :
                    ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                  val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                  val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                  val merge :
                    ('c,
                     ('k, 'a) t_ ->
                     ('k, 'b) t_ ->
                     f:(key:'k key_ ->
                        [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                        'c option) ->
                     ('k, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val merge_into :
                    f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                    src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                  val keys : ('a, 'b) t_ -> 'a key_ list
                  val data : ('a, 'b) t_ -> 'b list
                  val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
                  val filteri_inplace :
                    ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                  val equal :
                    ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
                  val similar :
                    ('a, 'b1) t_ ->
                    ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                  val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                  val validate :
                    name:('a key_ -> string) ->
                    'Core_kernel.Validate.check ->
                    ('a, 'b) t_ Core_kernel.Validate.check
                  val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Hash_set :
                sig
                  type elt = t
                  type 'a hash_set = 'Core_kernel.Hash_set.t
                  type t = elt hash_set
                  type 'a t_ = t
                  type 'a elt_ = elt
                  val create :
                    ('a, unit -> 'a t_)
                    Core_kernel.Hash_set_intf.create_options_without_hashable
                  val of_list :
                    ('a, 'a elt_ list -> 'a t_)
                    Core_kernel.Hash_set_intf.create_options_without_hashable
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_t : t Bin_prot.Type_class.t
                end
              module Hash_queue :
                sig
                  module Key :
                    sig
                      type t = t
                      val hash : t -> int
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                    end
                  type 'a t
                  val length : 'a t -> int
                  val is_empty : 'a t -> bool
                  val iter : 'a t -> f:('-> unit) -> unit
                  val fold :
                    'a t ->
                    init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                  val exists : 'a t -> f:('-> bool) -> bool
                  val for_all : 'a t -> f:('-> bool) -> bool
                  val count : 'a t -> f:('-> bool) -> int
                  val sum :
                    (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                    'a t -> f:('-> 'sum) -> 'sum
                  val find : 'a t -> f:('-> bool) -> 'a option
                  val find_map : 'a t -> f:('-> 'b option) -> 'b option
                  val to_list : 'a t -> 'a list
                  val to_array : 'a t -> 'a array
                  val min_elt : 'a t -> cmp:('-> '-> int) -> 'a option
                  val max_elt : 'a t -> cmp:('-> '-> int) -> 'a option
                  val invariant : 'a t -> unit
                  val create : unit -> 'a t
                  val clear : 'a t -> unit
                  val mem : 'a t -> Key.t -> bool
                  val lookup : 'a t -> Key.t -> 'a option
                  val lookup_exn : 'a t -> Key.t -> 'a
                  val enqueue :
                    'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                  val enqueue_exn : 'a t -> Key.t -> '-> unit
                  val first : 'a t -> 'a option
                  val keys : 'a t -> Key.t list
                  val dequeue : 'a t -> 'a option
                  val dequeue_exn : 'a t -> 'a
                  val dequeue_with_key : 'a t -> (Key.t * 'a) option
                  val dequeue_with_key_exn : 'a t -> Key.t * 'a
                  val dequeue_all : 'a t -> f:('-> unit) -> unit
                  val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                  val remove_exn : 'a t -> Key.t -> unit
                  val replace : 'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                  val replace_exn : 'a t -> Key.t -> '-> unit
                  val iteri :
                    'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                  val foldi :
                    'a t ->
                    init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                end
              val pp : Format.formatter -> t -> unit
              val t_of_sexp : Sexplib.Sexp.t -> t
              val sexp_of_t : t -> Sexplib.Sexp.t
              val bin_t : t Bin_prot.Type_class.t
              val bin_read_t : t Bin_prot.Read.reader
              val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
              val bin_reader_t : t Bin_prot.Type_class.reader
              val bin_size_t : t Bin_prot.Size.sizer
              val bin_write_t : t Bin_prot.Write.writer
              val bin_writer_t : t Bin_prot.Type_class.writer
              val of_json : Ezjsonm.t -> t
              val to_json : t -> Ezjsonm.t
              val of_raw : string -> t
              val to_raw : t -> string
              val of_bytes : Core_kernel.Std.Bigstring.t -> t
              val of_bytes' : string -> t
            end
          module Value :
            sig
              type key = key
              type contents = contents
              type t = (key, contents) IrminBlock.t
              val of_string : string -> t
              val to_string : t -> string
              val ( >= ) : t -> t -> bool
              val ( <= ) : t -> t -> bool
              val ( = ) : t -> t -> bool
              val ( > ) : t -> t -> bool
              val ( < ) : t -> t -> bool
              val ( <> ) : t -> t -> bool
              val equal : t -> t -> bool
              val compare : t -> t -> int
              val min : t -> t -> t
              val max : t -> t -> t
              val ascending : t -> t -> int
              val descending : t -> t -> int
              val between : t -> low:t -> high:t -> bool
              module Replace_polymorphic_compare :
                sig
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val _squelch_unused_module_warning_ : unit
                end
              type comparator_witness
              val validate_lbound :
                min:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val validate_ubound :
                max:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val validate_bound :
                min:t Core_kernel.Comparable_intf.bound ->
                max:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val comparator :
                (t, comparator_witness) Core_kernel.Comparator.comparator
              module Map :
                sig
                  module Key :
                    sig
                      type t = t
                      type comparator_witness = comparator_witness
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                    end
                  module Tree :
                    sig
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.Tree.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'a t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'a t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                    end
                  type 'a t =
                      (Key.t, 'a, Key.comparator_witness)
                      Core_kernel.Core_map.t
                  val empty : 'a t
                  val singleton : Key.t -> '-> 'a t
                  val of_alist :
                    (Key.t * 'a) list ->
                    [ `Duplicate_key of Key.t | `Ok of 'a t ]
                  val of_alist_or_error :
                    (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                  val of_alist_exn : (Key.t * 'a) list -> 'a t
                  val of_alist_multi : (Key.t * 'a) list -> 'a list t
                  val of_alist_fold :
                    (Key.t * 'a) list ->
                    init:'-> f:('-> '-> 'b) -> 'b t
                  val of_alist_reduce :
                    (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                  val of_sorted_array :
                    (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : (Key.t * 'a) array -> 'a t
                  val of_tree : 'Tree.t -> 'a t
                  val invariants : 'a t -> bool
                  val is_empty : 'a t -> bool
                  val length : 'a t -> int
                  val add : 'a t -> key:Key.t -> data:'-> 'a t
                  val add_multi :
                    'a list t -> key:Key.t -> data:'-> 'a list t
                  val change :
                    'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                  val find : 'a t -> Key.t -> 'a option
                  val find_exn : 'a t -> Key.t -> 'a
                  val remove : 'a t -> Key.t -> 'a t
                  val mem : 'a t -> Key.t -> bool
                  val iter : 'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                  val iter2 :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       data:[ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       unit) ->
                    unit
                  val map : 'a t -> f:('-> 'b) -> 'b t
                  val mapi : 'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                  val fold :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val fold_right :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val filter :
                    'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                  val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                  val filter_mapi :
                    'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                  val compare_direct :
                    ('-> '-> int) -> 'a t -> 'a t -> int
                  val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                  val keys : 'a t -> Key.t list
                  val data : 'a t -> 'a list
                  val to_alist : 'a t -> (Key.t * 'a) list
                  val validate :
                    name:(Key.t -> string) ->
                    'Core_kernel.Validate.check ->
                    'a t Core_kernel.Validate.check
                  val merge :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       'c option) ->
                    'c t
                  val symmetric_diff :
                    'a t ->
                    'a t ->
                    data_equal:('-> '-> bool) ->
                    (Key.t *
                     [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                    Core_kernel.Sequence.t
                  val min_elt : 'a t -> (Key.t * 'a) option
                  val min_elt_exn : 'a t -> Key.t * 'a
                  val max_elt : 'a t -> (Key.t * 'a) option
                  val max_elt_exn : 'a t -> Key.t * 'a
                  val for_all : 'a t -> f:('-> bool) -> bool
                  val exists : 'a t -> f:('-> bool) -> bool
                  val fold_range_inclusive :
                    'a t ->
                    min:Key.t ->
                    max:Key.t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val range_to_alist :
                    'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                  val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val rank : 'a t -> Key.t -> int option
                  val to_tree : 'a t -> 'Tree.t
                  val to_sequence :
                    ?keys_in:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Key.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Key.t ] ->
                    'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                  val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Set :
                sig
                  module Elt :
                    sig
                      type t = t
                      type comparator_witness = comparator_witness
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                    end
                  module Tree :
                    sig
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.Tree.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.Tree.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.Tree.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                    end
                  type t =
                      (Elt.t, Elt.comparator_witness) Core_kernel.Core_set.t
                  val length : t -> int
                  val is_empty : t -> bool
                  val iter : t -> f:(Elt.t -> unit) -> unit
                  val fold :
                    t ->
                    init:'accum -> f:('accum -> Elt.t -> 'accum) -> 'accum
                  val exists : t -> f:(Elt.t -> bool) -> bool
                  val for_all : t -> f:(Elt.t -> bool) -> bool
                  val count : t -> f:(Elt.t -> bool) -> int
                  val sum :
                    (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                    t -> f:(Elt.t -> 'sum) -> 'sum
                  val find : t -> f:(Elt.t -> bool) -> Elt.t option
                  val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                  val to_list : t -> Elt.t list
                  val to_array : t -> Elt.t array
                  val invariants : t -> bool
                  val mem : t -> Elt.t -> bool
                  val add : t -> Elt.t -> t
                  val remove : t -> Elt.t -> t
                  val union : t -> t -> t
                  val inter : t -> t -> t
                  val diff : t -> t -> t
                  val compare_direct : t -> t -> int
                  val equal : t -> t -> bool
                  val subset : t -> t -> bool
                  val fold_until :
                    t ->
                    init:'->
                    f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                    'b
                  val fold_right :
                    t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                  val iter2 :
                    t ->
                    t ->
                    f:([ `Both of Elt.t * Elt.t
                       | `Left of Elt.t
                       | `Right of Elt.t ] -> unit) ->
                    unit
                  val filter : t -> f:(Elt.t -> bool) -> t
                  val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                  val elements : t -> Elt.t list
                  val min_elt : t -> Elt.t option
                  val min_elt_exn : t -> Elt.t
                  val max_elt : t -> Elt.t option
                  val max_elt_exn : t -> Elt.t
                  val choose : t -> Elt.t option
                  val choose_exn : t -> Elt.t
                  val split : t -> Elt.t -> t * bool * t
                  val group_by :
                    t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                  val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                  val find_index : t -> int -> Elt.t option
                  val remove_index : t -> int -> t
                  val to_tree : t -> Tree.t
                  val to_sequence :
                    ?in_:[ `Decreasing_order
                         | `Decreasing_order_less_than_or_equal_to of Elt.t
                         | `Increasing_order
                         | `Increasing_order_greater_than_or_equal_to of
                             Elt.t ] ->
                    t -> Elt.t Core_kernel.Sequence.t
                  val to_map :
                    t ->
                    f:(Elt.t -> 'data) ->
                    (Elt.t, 'data, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t
                  val empty : t
                  val singleton : Elt.t -> t
                  val union_list : t list -> t
                  val of_list : Elt.t list -> t
                  val of_array : Elt.t array -> t
                  val of_sorted_array :
                    Elt.t array -> t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : Elt.t array -> t
                  val stable_dedup_list : Elt.t list -> Elt.t list
                  val map :
                    ('a, 'b) Core_kernel.Core_set.t -> f:('-> Elt.t) -> t
                  val filter_map :
                    ('a, 'b) Core_kernel.Core_set.t ->
                    f:('-> Elt.t option) -> t
                  val of_tree : Tree.t -> t
                  val of_map_keys :
                    (Elt.t, 'a, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t -> t
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val compare : t -> t -> int
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_t : t Bin_prot.Type_class.t
                end
              module Hashable : sig type t = t end
              val hash : t -> int
              val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
              module Table :
                sig
                  type key = t
                  type ('a, 'b) hashtbl =
                      ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                  type 'b t = (key, 'b) hashtbl
                  type ('a, 'b) t_ = 'b t
                  type 'a key_ = key
                  val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
                  val create :
                    ('a key_, 'b, unit -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_report_all_dups :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_or_error :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     ('a, 'b) t_ Core_kernel.Or_error.t)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_exn :
                    ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_multi :
                    ('a key_, 'b list,
                     ('a key_ * 'b) list -> ('a, 'b list) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_mapped :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key_exn :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val group :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                  val clear : ('a, 'b) t_ -> unit
                  val copy : ('a, 'b) t_ -> ('a, 'b) t_
                  val invariant : ('a, 'b) t_ -> unit
                  val fold :
                    ('a, 'b) t_ ->
                    init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                  val iter :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
                  val existsi :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val for_alli :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val length : ('a, 'b) t_ -> int
                  val is_empty : ('a, 'b) t_ -> bool
                  val mem : ('a, 'b) t_ -> 'a key_ -> bool
                  val remove : ('a, 'b) t_ -> 'a key_ -> unit
                  val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                  val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val add :
                    ('a, 'b) t_ ->
                    key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                  val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val change :
                    ('a, 'b) t_ ->
                    'a key_ -> ('b option -> 'b option) -> unit
                  val add_multi :
                    ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                  val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                  val map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                  val filteri :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                  val partition_map :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:('-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_mapi :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:(key:'a key_ ->
                         data:'-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_tf :
                    ('a, 'b) t_ ->
                    f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                  val partitioni_tf :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) ->
                    ('a, 'b) t_ * ('a, 'b) t_
                  val find_or_add :
                    ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                  val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                  val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                  val merge :
                    ('c,
                     ('k, 'a) t_ ->
                     ('k, 'b) t_ ->
                     f:(key:'k key_ ->
                        [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                        'c option) ->
                     ('k, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val merge_into :
                    f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                    src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                  val keys : ('a, 'b) t_ -> 'a key_ list
                  val data : ('a, 'b) t_ -> 'b list
                  val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
                  val filteri_inplace :
                    ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                  val equal :
                    ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
                  val similar :
                    ('a, 'b1) t_ ->
                    ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                  val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                  val validate :
                    name:('a key_ -> string) ->
                    'Core_kernel.Validate.check ->
                    ('a, 'b) t_ Core_kernel.Validate.check
                  val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Pooled_hashtbl :
                sig
                  type key = t
                  type ('a, 'b) hashtbl =
                      ('a, 'b) Core_kernel.Pooled_hashtbl.t
                  type 'b t = (key, 'b) hashtbl
                  type ('a, 'b) t_ = 'b t
                  type 'a key_ = key
                  val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
                  val create :
                    ('a key_, 'b, unit -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_report_all_dups :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_or_error :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     ('a, 'b) t_ Core_kernel.Or_error.t)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_exn :
                    ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_multi :
                    ('a key_, 'b list,
                     ('a key_ * 'b) list -> ('a, 'b list) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_mapped :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key_exn :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val group :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                  val clear : ('a, 'b) t_ -> unit
                  val copy : ('a, 'b) t_ -> ('a, 'b) t_
                  val invariant : ('a, 'b) t_ -> unit
                  val fold :
                    ('a, 'b) t_ ->
                    init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                  val iter :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
                  val existsi :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val for_alli :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val length : ('a, 'b) t_ -> int
                  val is_empty : ('a, 'b) t_ -> bool
                  val mem : ('a, 'b) t_ -> 'a key_ -> bool
                  val remove : ('a, 'b) t_ -> 'a key_ -> unit
                  val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                  val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val add :
                    ('a, 'b) t_ ->
                    key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                  val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val change :
                    ('a, 'b) t_ ->
                    'a key_ -> ('b option -> 'b option) -> unit
                  val add_multi :
                    ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                  val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                  val map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                  val filteri :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                  val partition_map :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:('-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_mapi :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:(key:'a key_ ->
                         data:'-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_tf :
                    ('a, 'b) t_ ->
                    f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                  val partitioni_tf :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) ->
                    ('a, 'b) t_ * ('a, 'b) t_
                  val find_or_add :
                    ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                  val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                  val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                  val merge :
                    ('c,
                     ('k, 'a) t_ ->
                     ('k, 'b) t_ ->
                     f:(key:'k key_ ->
                        [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                        'c option) ->
                     ('k, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val merge_into :
                    f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                    src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                  val keys : ('a, 'b) t_ -> 'a key_ list
                  val data : ('a, 'b) t_ -> 'b list
                  val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
                  val filteri_inplace :
                    ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                  val equal :
                    ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
                  val similar :
                    ('a, 'b1) t_ ->
                    ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                  val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                  val validate :
                    name:('a key_ -> string) ->
                    'Core_kernel.Validate.check ->
                    ('a, 'b) t_ Core_kernel.Validate.check
                  val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Hash_set :
                sig
                  type elt = t
                  type 'a hash_set = 'Core_kernel.Hash_set.t
                  type t = elt hash_set
                  type 'a t_ = t
                  type 'a elt_ = elt
                  val create :
                    ('a, unit -> 'a t_)
                    Core_kernel.Hash_set_intf.create_options_without_hashable
                  val of_list :
                    ('a, 'a elt_ list -> 'a t_)
                    Core_kernel.Hash_set_intf.create_options_without_hashable
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_t : t Bin_prot.Type_class.t
                end
              module Hash_queue :
                sig
                  module Key :
                    sig
                      type t = t
                      val hash : t -> int
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                    end
                  type 'a t
                  val length : 'a t -> int
                  val is_empty : 'a t -> bool
                  val iter : 'a t -> f:('-> unit) -> unit
                  val fold :
                    'a t ->
                    init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                  val exists : 'a t -> f:('-> bool) -> bool
                  val for_all : 'a t -> f:('-> bool) -> bool
                  val count : 'a t -> f:('-> bool) -> int
                  val sum :
                    (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                    'a t -> f:('-> 'sum) -> 'sum
                  val find : 'a t -> f:('-> bool) -> 'a option
                  val find_map : 'a t -> f:('-> 'b option) -> 'b option
                  val to_list : 'a t -> 'a list
                  val to_array : 'a t -> 'a array
                  val min_elt : 'a t -> cmp:('-> '-> int) -> 'a option
                  val max_elt : 'a t -> cmp:('-> '-> int) -> 'a option
                  val invariant : 'a t -> unit
                  val create : unit -> 'a t
                  val clear : 'a t -> unit
                  val mem : 'a t -> Key.t -> bool
                  val lookup : 'a t -> Key.t -> 'a option
                  val lookup_exn : 'a t -> Key.t -> 'a
                  val enqueue :
                    'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                  val enqueue_exn : 'a t -> Key.t -> '-> unit
                  val first : 'a t -> 'a option
                  val keys : 'a t -> Key.t list
                  val dequeue : 'a t -> 'a option
                  val dequeue_exn : 'a t -> 'a
                  val dequeue_with_key : 'a t -> (Key.t * 'a) option
                  val dequeue_with_key_exn : 'a t -> Key.t * 'a
                  val dequeue_all : 'a t -> f:('-> unit) -> unit
                  val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                  val remove_exn : 'a t -> Key.t -> unit
                  val replace : 'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                  val replace_exn : 'a t -> Key.t -> '-> unit
                  val iteri :
                    'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                  val foldi :
                    'a t ->
                    init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                end
              val pp : Format.formatter -> t -> unit
              val t_of_sexp : Sexplib.Sexp.t -> t
              val sexp_of_t : t -> Sexplib.Sexp.t
              val bin_t : t Bin_prot.Type_class.t
              val bin_read_t : t Bin_prot.Read.reader
              val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
              val bin_reader_t : t Bin_prot.Type_class.reader
              val bin_size_t : t Bin_prot.Size.sizer
              val bin_write_t : t Bin_prot.Write.writer
              val bin_writer_t : t Bin_prot.Type_class.writer
              val of_json : Ezjsonm.t -> t
              val to_json : t -> Ezjsonm.t
              val merge : t IrminMerge.t
            end
          module Graph :
            sig
              type t
              module V :
                sig
                  type t = (key, unit) IrminGraph.vertex
                  val compare : t -> t -> int
                  val hash : t -> int
                  val equal : t -> t -> bool
                  type label
                  val create : label -> t
                  val label : t -> label
                end
              type vertex = V.t
              module E :
                sig
                  type t
                  val compare : t -> t -> int
                  type vertex = vertex
                  val src : t -> vertex
                  val dst : t -> vertex
                  type label
                  val create : vertex -> label -> vertex -> t
                  val label : t -> label
                end
              type edge = E.t
              val is_directed : bool
              val is_empty : t -> bool
              val nb_vertex : t -> int
              val nb_edges : t -> int
              val out_degree : t -> vertex -> int
              val in_degree : t -> vertex -> int
              val mem_vertex : t -> vertex -> bool
              val mem_edge : t -> vertex -> vertex -> bool
              val mem_edge_e : t -> edge -> bool
              val find_edge : t -> vertex -> vertex -> edge
              val find_all_edges : t -> vertex -> vertex -> edge list
              val succ : t -> vertex -> vertex list
              val pred : t -> vertex -> vertex list
              val succ_e : t -> vertex -> edge list
              val pred_e : t -> vertex -> edge list
              val iter_vertex : (vertex -> unit) -> t -> unit
              val fold_vertex : (vertex -> '-> 'a) -> t -> '-> 'a
              val iter_edges : (vertex -> vertex -> unit) -> t -> unit
              val fold_edges :
                (vertex -> vertex -> '-> 'a) -> t -> '-> 'a
              val iter_edges_e : (edge -> unit) -> t -> unit
              val fold_edges_e : (edge -> '-> 'a) -> t -> '-> 'a
              val map_vertex : (vertex -> vertex) -> t -> t
              val iter_succ : (vertex -> unit) -> t -> vertex -> unit
              val iter_pred : (vertex -> unit) -> t -> vertex -> unit
              val fold_succ : (vertex -> '-> 'a) -> t -> vertex -> '-> 'a
              val fold_pred : (vertex -> '-> 'a) -> t -> vertex -> '-> 'a
              val iter_succ_e : (edge -> unit) -> t -> vertex -> unit
              val fold_succ_e : (edge -> '-> 'a) -> t -> vertex -> '-> 'a
              val iter_pred_e : (edge -> unit) -> t -> vertex -> unit
              val fold_pred_e : (edge -> '-> 'a) -> t -> vertex -> '-> 'a
              val create : ?size:int -> unit -> t
              val clear : t -> unit
              val copy : t -> t
              val add_vertex : t -> vertex -> unit
              val remove_vertex : t -> vertex -> unit
              val add_edge : t -> vertex -> vertex -> unit
              val add_edge_e : t -> edge -> unit
              val remove_edge : t -> vertex -> vertex -> unit
              val remove_edge_e : t -> edge -> unit
              val transitive_closure : ?reflexive:bool -> t -> t
              val add_transitive_closure : ?reflexive:bool -> t -> t
              val transitive_reduction : ?reflexive:bool -> t -> t
              val replace_by_transitive_reduction : ?reflexive:bool -> t -> t
              val mirror : t -> t
              val complement : t -> t
              val intersect : t -> t -> t
              val union : t -> t -> t
              module Topological :
                sig val fold : (vertex -> '-> 'a) -> t -> '-> 'end
              val vertex : t -> vertex list
              val edges : t -> (vertex * vertex) list
              val closure :
                ?depth:int ->
                ?min:vertex list ->
                pred:(vertex -> vertex list Lwt.t) -> vertex list -> t Lwt.t
              val output :
                Format.formatter ->
                (vertex * Graph.Graphviz.DotAttributes.vertex list) list ->
                (vertex * Graph.Graphviz.DotAttributes.edge list * vertex)
                list -> string -> unit
              val min : t -> vertex list
              val max : t -> vertex list
              type dump = vertex list * (vertex * vertex) list
              val export : t -> dump
              val import : dump -> t
              module Dump :
                sig
                  type t = dump
                  val of_string : string -> t
                  val to_string : t -> string
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val ascending : t -> t -> int
                  val descending : t -> t -> int
                  val between : t -> low:t -> high:t -> bool
                  module Replace_polymorphic_compare :
                    sig
                      val ( >= ) : t -> t -> bool
                      val ( <= ) : t -> t -> bool
                      val ( = ) : t -> t -> bool
                      val ( > ) : t -> t -> bool
                      val ( < ) : t -> t -> bool
                      val ( <> ) : t -> t -> bool
                      val equal : t -> t -> bool
                      val compare : t -> t -> int
                      val min : t -> t -> t
                      val max : t -> t -> t
                      val _squelch_unused_module_warning_ : unit
                    end
                  type comparator_witness
                  val validate_lbound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_ubound :
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_bound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val comparator :
                    (t, comparator_witness) Core_kernel.Comparator.comparator
                  module Map :
                    sig
                      module Key :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                        end
                      module Tree :
                        sig
                          type 'a t =
                              (Key.t, 'a, Key.comparator_witness)
                              Core_kernel.Core_map.Tree.t
                          val empty : 'a t
                          val singleton : Key.t -> '-> 'a t
                          val of_alist :
                            (Key.t * 'a) list ->
                            [ `Duplicate_key of Key.t | `Ok of 'a t ]
                          val of_alist_or_error :
                            (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                          val of_alist_exn : (Key.t * 'a) list -> 'a t
                          val of_alist_multi : (Key.t * 'a) list -> 'a list t
                          val of_alist_fold :
                            (Key.t * 'a) list ->
                            init:'-> f:('-> '-> 'b) -> 'b t
                          val of_alist_reduce :
                            (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                          val of_sorted_array :
                            (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked :
                            (Key.t * 'a) array -> 'a t
                          val of_tree : 'a t -> 'a t
                          val invariants : 'a t -> bool
                          val is_empty : 'a t -> bool
                          val length : 'a t -> int
                          val add : 'a t -> key:Key.t -> data:'-> 'a t
                          val add_multi :
                            'a list t -> key:Key.t -> data:'-> 'a list t
                          val change :
                            'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                          val find : 'a t -> Key.t -> 'a option
                          val find_exn : 'a t -> Key.t -> 'a
                          val remove : 'a t -> Key.t -> 'a t
                          val mem : 'a t -> Key.t -> bool
                          val iter :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val iter2 :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               data:[ `Both of 'a * 'b
                                    | `Left of 'a
                                    | `Right of 'b ] ->
                               unit) ->
                            unit
                          val map : 'a t -> f:('-> 'b) -> 'b t
                          val mapi :
                            'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                          val fold :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val fold_right :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val filter :
                            'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                          val filter_map :
                            'a t -> f:('-> 'b option) -> 'b t
                          val filter_mapi :
                            'a t ->
                            f:(key:Key.t -> data:'-> 'b option) -> 'b t
                          val compare_direct :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val equal :
                            ('-> '-> bool) -> 'a t -> 'a t -> bool
                          val keys : 'a t -> Key.t list
                          val data : 'a t -> 'a list
                          val to_alist : 'a t -> (Key.t * 'a) list
                          val validate :
                            name:(Key.t -> string) ->
                            'Core_kernel.Validate.check ->
                            'a t Core_kernel.Validate.check
                          val merge :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            'c t
                          val symmetric_diff :
                            'a t ->
                            'a t ->
                            data_equal:('-> '-> bool) ->
                            (Key.t *
                             [ `Left of 'a
                             | `Right of 'a
                             | `Unequal of 'a * 'a ])
                            Core_kernel.Sequence.t
                          val min_elt : 'a t -> (Key.t * 'a) option
                          val min_elt_exn : 'a t -> Key.t * 'a
                          val max_elt : 'a t -> (Key.t * 'a) option
                          val max_elt_exn : 'a t -> Key.t * 'a
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val exists : 'a t -> f:('-> bool) -> bool
                          val fold_range_inclusive :
                            'a t ->
                            min:Key.t ->
                            max:Key.t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val range_to_alist :
                            'a t ->
                            min:Key.t -> max:Key.t -> (Key.t * 'a) list
                          val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val rank : 'a t -> Key.t -> int option
                          val to_tree : 'a t -> 'a t
                          val to_sequence :
                            ?keys_in:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Key.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Key.t ] ->
                            'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                        end
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'Tree.t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'Tree.t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Set :
                    sig
                      module Elt :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                        end
                      module Tree :
                        sig
                          type t =
                              (Elt.t, Elt.comparator_witness)
                              Core_kernel.Core_set.Tree.t
                          val length : t -> int
                          val is_empty : t -> bool
                          val iter : t -> f:(Elt.t -> unit) -> unit
                          val fold :
                            t ->
                            init:'accum ->
                            f:('accum -> Elt.t -> 'accum) -> 'accum
                          val exists : t -> f:(Elt.t -> bool) -> bool
                          val for_all : t -> f:(Elt.t -> bool) -> bool
                          val count : t -> f:(Elt.t -> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            t -> f:(Elt.t -> 'sum) -> 'sum
                          val find : t -> f:(Elt.t -> bool) -> Elt.t option
                          val find_map :
                            t -> f:(Elt.t -> 'a option) -> 'a option
                          val to_list : t -> Elt.t list
                          val to_array : t -> Elt.t array
                          val invariants : t -> bool
                          val mem : t -> Elt.t -> bool
                          val add : t -> Elt.t -> t
                          val remove : t -> Elt.t -> t
                          val union : t -> t -> t
                          val inter : t -> t -> t
                          val diff : t -> t -> t
                          val compare_direct : t -> t -> int
                          val equal : t -> t -> bool
                          val subset : t -> t -> bool
                          val fold_until :
                            t ->
                            init:'->
                            f:('->
                               Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                            'b
                          val fold_right :
                            t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                          val iter2 :
                            t ->
                            t ->
                            f:([ `Both of Elt.t * Elt.t
                               | `Left of Elt.t
                               | `Right of Elt.t ] -> unit) ->
                            unit
                          val filter : t -> f:(Elt.t -> bool) -> t
                          val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                          val elements : t -> Elt.t list
                          val min_elt : t -> Elt.t option
                          val min_elt_exn : t -> Elt.t
                          val max_elt : t -> Elt.t option
                          val max_elt_exn : t -> Elt.t
                          val choose : t -> Elt.t option
                          val choose_exn : t -> Elt.t
                          val split : t -> Elt.t -> t * bool * t
                          val group_by :
                            t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                          val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                          val find_index : t -> int -> Elt.t option
                          val remove_index : t -> int -> t
                          val to_tree : t -> t
                          val to_sequence :
                            ?in_:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Elt.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Elt.t ] ->
                            t -> Elt.t Core_kernel.Sequence.t
                          val to_map :
                            t ->
                            f:(Elt.t -> 'data) ->
                            (Elt.t, 'data, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t
                          val empty : t
                          val singleton : Elt.t -> t
                          val union_list : t list -> t
                          val of_list : Elt.t list -> t
                          val of_array : Elt.t array -> t
                          val of_sorted_array :
                            Elt.t array -> t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked : Elt.t array -> t
                          val stable_dedup_list : Elt.t list -> Elt.t list
                          val map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t) -> t
                          val filter_map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t option) -> t
                          val of_tree : t -> t
                          val of_map_keys :
                            (Elt.t, 'a, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t -> t
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> Tree.t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : Tree.t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hashable : sig type t = t end
                  val hash : t -> int
                  val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
                  module Table :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Pooled_hashtbl :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Pooled_hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Hash_set :
                    sig
                      type elt = t
                      type 'a hash_set = 'Core_kernel.Hash_set.t
                      type t = elt hash_set
                      type 'a t_ = t
                      type 'a elt_ = elt
                      val create :
                        ('a, unit -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val of_list :
                        ('a, 'a elt_ list -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hash_queue :
                    sig
                      module Key :
                        sig
                          type t = t
                          val hash : t -> int
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type 'a t
                      val length : 'a t -> int
                      val is_empty : 'a t -> bool
                      val iter : 'a t -> f:('-> unit) -> unit
                      val fold :
                        'a t ->
                        init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                      val exists : 'a t -> f:('-> bool) -> bool
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val count : 'a t -> f:('-> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        'a t -> f:('-> 'sum) -> 'sum
                      val find : 'a t -> f:('-> bool) -> 'a option
                      val find_map : 'a t -> f:('-> 'b option) -> 'b option
                      val to_list : 'a t -> 'a list
                      val to_array : 'a t -> 'a array
                      val min_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val max_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val invariant : 'a t -> unit
                      val create : unit -> 'a t
                      val clear : 'a t -> unit
                      val mem : 'a t -> Key.t -> bool
                      val lookup : 'a t -> Key.t -> 'a option
                      val lookup_exn : 'a t -> Key.t -> 'a
                      val enqueue :
                        'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                      val enqueue_exn : 'a t -> Key.t -> '-> unit
                      val first : 'a t -> 'a option
                      val keys : 'a t -> Key.t list
                      val dequeue : 'a t -> 'a option
                      val dequeue_exn : 'a t -> 'a
                      val dequeue_with_key : 'a t -> (Key.t * 'a) option
                      val dequeue_with_key_exn : 'a t -> Key.t * 'a
                      val dequeue_all : 'a t -> f:('-> unit) -> unit
                      val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                      val remove_exn : 'a t -> Key.t -> unit
                      val replace :
                        'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                      val replace_exn : 'a t -> Key.t -> '-> unit
                      val iteri :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val foldi :
                        'a t ->
                        init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                    end
                  val pp : Format.formatter -> t -> unit
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_t : t Bin_prot.Type_class.t
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val of_json : Ezjsonm.t -> t
                  val to_json : t -> Ezjsonm.t
                end
            end
        end
      module Tag :
        sig
          type t
          type key = branch
          type value = Block.key
          val create : unit -> t Lwt.t
          val read : t -> key -> value option Lwt.t
          val read_exn : t -> key -> value Lwt.t
          val mem : t -> key -> bool Lwt.t
          val list : t -> key list -> key list Lwt.t
          val dump : t -> (key * value) list Lwt.t
          val update : t -> key -> value -> unit Lwt.t
          val remove : t -> key -> unit Lwt.t
          val watch : t -> key -> value Lwt_stream.t
          module Key :
            sig
              type t = key
              val of_string : string -> t
              val to_string : t -> string
              val ( >= ) : t -> t -> bool
              val ( <= ) : t -> t -> bool
              val ( = ) : t -> t -> bool
              val ( > ) : t -> t -> bool
              val ( < ) : t -> t -> bool
              val ( <> ) : t -> t -> bool
              val equal : t -> t -> bool
              val compare : t -> t -> int
              val min : t -> t -> t
              val max : t -> t -> t
              val ascending : t -> t -> int
              val descending : t -> t -> int
              val between : t -> low:t -> high:t -> bool
              module Replace_polymorphic_compare :
                sig
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val _squelch_unused_module_warning_ : unit
                end
              type comparator_witness
              val validate_lbound :
                min:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val validate_ubound :
                max:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val validate_bound :
                min:t Core_kernel.Comparable_intf.bound ->
                max:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val comparator :
                (t, comparator_witness) Core_kernel.Comparator.comparator
              module Map :
                sig
                  module Key :
                    sig
                      type t = t
                      type comparator_witness = comparator_witness
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                    end
                  module Tree :
                    sig
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.Tree.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'a t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'a t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                    end
                  type 'a t =
                      (Key.t, 'a, Key.comparator_witness)
                      Core_kernel.Core_map.t
                  val empty : 'a t
                  val singleton : Key.t -> '-> 'a t
                  val of_alist :
                    (Key.t * 'a) list ->
                    [ `Duplicate_key of Key.t | `Ok of 'a t ]
                  val of_alist_or_error :
                    (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                  val of_alist_exn : (Key.t * 'a) list -> 'a t
                  val of_alist_multi : (Key.t * 'a) list -> 'a list t
                  val of_alist_fold :
                    (Key.t * 'a) list ->
                    init:'-> f:('-> '-> 'b) -> 'b t
                  val of_alist_reduce :
                    (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                  val of_sorted_array :
                    (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : (Key.t * 'a) array -> 'a t
                  val of_tree : 'Tree.t -> 'a t
                  val invariants : 'a t -> bool
                  val is_empty : 'a t -> bool
                  val length : 'a t -> int
                  val add : 'a t -> key:Key.t -> data:'-> 'a t
                  val add_multi :
                    'a list t -> key:Key.t -> data:'-> 'a list t
                  val change :
                    'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                  val find : 'a t -> Key.t -> 'a option
                  val find_exn : 'a t -> Key.t -> 'a
                  val remove : 'a t -> Key.t -> 'a t
                  val mem : 'a t -> Key.t -> bool
                  val iter : 'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                  val iter2 :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       data:[ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       unit) ->
                    unit
                  val map : 'a t -> f:('-> 'b) -> 'b t
                  val mapi : 'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                  val fold :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val fold_right :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val filter :
                    'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                  val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                  val filter_mapi :
                    'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                  val compare_direct :
                    ('-> '-> int) -> 'a t -> 'a t -> int
                  val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                  val keys : 'a t -> Key.t list
                  val data : 'a t -> 'a list
                  val to_alist : 'a t -> (Key.t * 'a) list
                  val validate :
                    name:(Key.t -> string) ->
                    'Core_kernel.Validate.check ->
                    'a t Core_kernel.Validate.check
                  val merge :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       'c option) ->
                    'c t
                  val symmetric_diff :
                    'a t ->
                    'a t ->
                    data_equal:('-> '-> bool) ->
                    (Key.t *
                     [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                    Core_kernel.Sequence.t
                  val min_elt : 'a t -> (Key.t * 'a) option
                  val min_elt_exn : 'a t -> Key.t * 'a
                  val max_elt : 'a t -> (Key.t * 'a) option
                  val max_elt_exn : 'a t -> Key.t * 'a
                  val for_all : 'a t -> f:('-> bool) -> bool
                  val exists : 'a t -> f:('-> bool) -> bool
                  val fold_range_inclusive :
                    'a t ->
                    min:Key.t ->
                    max:Key.t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val range_to_alist :
                    'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                  val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val rank : 'a t -> Key.t -> int option
                  val to_tree : 'a t -> 'Tree.t
                  val to_sequence :
                    ?keys_in:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Key.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Key.t ] ->
                    'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                  val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Set :
                sig
                  module Elt :
                    sig
                      type t = t
                      type comparator_witness = comparator_witness
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                    end
                  module Tree :
                    sig
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.Tree.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.Tree.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.Tree.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                    end
                  type t =
                      (Elt.t, Elt.comparator_witness) Core_kernel.Core_set.t
                  val length : t -> int
                  val is_empty : t -> bool
                  val iter : t -> f:(Elt.t -> unit) -> unit
                  val fold :
                    t ->
                    init:'accum -> f:('accum -> Elt.t -> 'accum) -> 'accum
                  val exists : t -> f:(Elt.t -> bool) -> bool
                  val for_all : t -> f:(Elt.t -> bool) -> bool
                  val count : t -> f:(Elt.t -> bool) -> int
                  val sum :
                    (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                    t -> f:(Elt.t -> 'sum) -> 'sum
                  val find : t -> f:(Elt.t -> bool) -> Elt.t option
                  val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                  val to_list : t -> Elt.t list
                  val to_array : t -> Elt.t array
                  val invariants : t -> bool
                  val mem : t -> Elt.t -> bool
                  val add : t -> Elt.t -> t
                  val remove : t -> Elt.t -> t
                  val union : t -> t -> t
                  val inter : t -> t -> t
                  val diff : t -> t -> t
                  val compare_direct : t -> t -> int
                  val equal : t -> t -> bool
                  val subset : t -> t -> bool
                  val fold_until :
                    t ->
                    init:'->
                    f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                    'b
                  val fold_right :
                    t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                  val iter2 :
                    t ->
                    t ->
                    f:([ `Both of Elt.t * Elt.t
                       | `Left of Elt.t
                       | `Right of Elt.t ] -> unit) ->
                    unit
                  val filter : t -> f:(Elt.t -> bool) -> t
                  val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                  val elements : t -> Elt.t list
                  val min_elt : t -> Elt.t option
                  val min_elt_exn : t -> Elt.t
                  val max_elt : t -> Elt.t option
                  val max_elt_exn : t -> Elt.t
                  val choose : t -> Elt.t option
                  val choose_exn : t -> Elt.t
                  val split : t -> Elt.t -> t * bool * t
                  val group_by :
                    t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                  val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                  val find_index : t -> int -> Elt.t option
                  val remove_index : t -> int -> t
                  val to_tree : t -> Tree.t
                  val to_sequence :
                    ?in_:[ `Decreasing_order
                         | `Decreasing_order_less_than_or_equal_to of Elt.t
                         | `Increasing_order
                         | `Increasing_order_greater_than_or_equal_to of
                             Elt.t ] ->
                    t -> Elt.t Core_kernel.Sequence.t
                  val to_map :
                    t ->
                    f:(Elt.t -> 'data) ->
                    (Elt.t, 'data, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t
                  val empty : t
                  val singleton : Elt.t -> t
                  val union_list : t list -> t
                  val of_list : Elt.t list -> t
                  val of_array : Elt.t array -> t
                  val of_sorted_array :
                    Elt.t array -> t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : Elt.t array -> t
                  val stable_dedup_list : Elt.t list -> Elt.t list
                  val map :
                    ('a, 'b) Core_kernel.Core_set.t -> f:('-> Elt.t) -> t
                  val filter_map :
                    ('a, 'b) Core_kernel.Core_set.t ->
                    f:('-> Elt.t option) -> t
                  val of_tree : Tree.t -> t
                  val of_map_keys :
                    (Elt.t, 'a, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t -> t
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val compare : t -> t -> int
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_t : t Bin_prot.Type_class.t
                end
              module Hashable : sig type t = t end
              val hash : t -> int
              val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
              module Table :
                sig
                  type key = t
                  type ('a, 'b) hashtbl =
                      ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                  type 'b t = (key, 'b) hashtbl
                  type ('a, 'b) t_ = 'b t
                  type 'a key_ = key
                  val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
                  val create :
                    ('a key_, 'b, unit -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_report_all_dups :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_or_error :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     ('a, 'b) t_ Core_kernel.Or_error.t)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_exn :
                    ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_multi :
                    ('a key_, 'b list,
                     ('a key_ * 'b) list -> ('a, 'b list) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_mapped :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key_exn :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val group :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                  val clear : ('a, 'b) t_ -> unit
                  val copy : ('a, 'b) t_ -> ('a, 'b) t_
                  val invariant : ('a, 'b) t_ -> unit
                  val fold :
                    ('a, 'b) t_ ->
                    init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                  val iter :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
                  val existsi :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val for_alli :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val length : ('a, 'b) t_ -> int
                  val is_empty : ('a, 'b) t_ -> bool
                  val mem : ('a, 'b) t_ -> 'a key_ -> bool
                  val remove : ('a, 'b) t_ -> 'a key_ -> unit
                  val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                  val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val add :
                    ('a, 'b) t_ ->
                    key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                  val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val change :
                    ('a, 'b) t_ ->
                    'a key_ -> ('b option -> 'b option) -> unit
                  val add_multi :
                    ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                  val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                  val map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                  val filteri :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                  val partition_map :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:('-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_mapi :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:(key:'a key_ ->
                         data:'-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_tf :
                    ('a, 'b) t_ ->
                    f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                  val partitioni_tf :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) ->
                    ('a, 'b) t_ * ('a, 'b) t_
                  val find_or_add :
                    ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                  val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                  val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                  val merge :
                    ('c,
                     ('k, 'a) t_ ->
                     ('k, 'b) t_ ->
                     f:(key:'k key_ ->
                        [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                        'c option) ->
                     ('k, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val merge_into :
                    f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                    src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                  val keys : ('a, 'b) t_ -> 'a key_ list
                  val data : ('a, 'b) t_ -> 'b list
                  val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
                  val filteri_inplace :
                    ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                  val equal :
                    ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
                  val similar :
                    ('a, 'b1) t_ ->
                    ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                  val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                  val validate :
                    name:('a key_ -> string) ->
                    'Core_kernel.Validate.check ->
                    ('a, 'b) t_ Core_kernel.Validate.check
                  val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Pooled_hashtbl :
                sig
                  type key = t
                  type ('a, 'b) hashtbl =
                      ('a, 'b) Core_kernel.Pooled_hashtbl.t
                  type 'b t = (key, 'b) hashtbl
                  type ('a, 'b) t_ = 'b t
                  type 'a key_ = key
                  val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
                  val create :
                    ('a key_, 'b, unit -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_report_all_dups :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_or_error :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     ('a, 'b) t_ Core_kernel.Or_error.t)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_exn :
                    ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_multi :
                    ('a key_, 'b list,
                     ('a key_ * 'b) list -> ('a, 'b list) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_mapped :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key_exn :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val group :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                  val clear : ('a, 'b) t_ -> unit
                  val copy : ('a, 'b) t_ -> ('a, 'b) t_
                  val invariant : ('a, 'b) t_ -> unit
                  val fold :
                    ('a, 'b) t_ ->
                    init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                  val iter :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
                  val existsi :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val for_alli :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val length : ('a, 'b) t_ -> int
                  val is_empty : ('a, 'b) t_ -> bool
                  val mem : ('a, 'b) t_ -> 'a key_ -> bool
                  val remove : ('a, 'b) t_ -> 'a key_ -> unit
                  val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                  val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val add :
                    ('a, 'b) t_ ->
                    key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                  val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val change :
                    ('a, 'b) t_ ->
                    'a key_ -> ('b option -> 'b option) -> unit
                  val add_multi :
                    ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                  val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                  val map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                  val filteri :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                  val partition_map :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:('-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_mapi :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:(key:'a key_ ->
                         data:'-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_tf :
                    ('a, 'b) t_ ->
                    f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                  val partitioni_tf :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) ->
                    ('a, 'b) t_ * ('a, 'b) t_
                  val find_or_add :
                    ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                  val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                  val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                  val merge :
                    ('c,
                     ('k, 'a) t_ ->
                     ('k, 'b) t_ ->
                     f:(key:'k key_ ->
                        [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                        'c option) ->
                     ('k, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val merge_into :
                    f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                    src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                  val keys : ('a, 'b) t_ -> 'a key_ list
                  val data : ('a, 'b) t_ -> 'b list
                  val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
                  val filteri_inplace :
                    ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                  val equal :
                    ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
                  val similar :
                    ('a, 'b1) t_ ->
                    ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                  val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                  val validate :
                    name:('a key_ -> string) ->
                    'Core_kernel.Validate.check ->
                    ('a, 'b) t_ Core_kernel.Validate.check
                  val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Hash_set :
                sig
                  type elt = t
                  type 'a hash_set = 'Core_kernel.Hash_set.t
                  type t = elt hash_set
                  type 'a t_ = t
                  type 'a elt_ = elt
                  val create :
                    ('a, unit -> 'a t_)
                    Core_kernel.Hash_set_intf.create_options_without_hashable
                  val of_list :
                    ('a, 'a elt_ list -> 'a t_)
                    Core_kernel.Hash_set_intf.create_options_without_hashable
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_t : t Bin_prot.Type_class.t
                end
              module Hash_queue :
                sig
                  module Key :
                    sig
                      type t = t
                      val hash : t -> int
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                    end
                  type 'a t
                  val length : 'a t -> int
                  val is_empty : 'a t -> bool
                  val iter : 'a t -> f:('-> unit) -> unit
                  val fold :
                    'a t ->
                    init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                  val exists : 'a t -> f:('-> bool) -> bool
                  val for_all : 'a t -> f:('-> bool) -> bool
                  val count : 'a t -> f:('-> bool) -> int
                  val sum :
                    (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                    'a t -> f:('-> 'sum) -> 'sum
                  val find : 'a t -> f:('-> bool) -> 'a option
                  val find_map : 'a t -> f:('-> 'b option) -> 'b option
                  val to_list : 'a t -> 'a list
                  val to_array : 'a t -> 'a array
                  val min_elt : 'a t -> cmp:('-> '-> int) -> 'a option
                  val max_elt : 'a t -> cmp:('-> '-> int) -> 'a option
                  val invariant : 'a t -> unit
                  val create : unit -> 'a t
                  val clear : 'a t -> unit
                  val mem : 'a t -> Key.t -> bool
                  val lookup : 'a t -> Key.t -> 'a option
                  val lookup_exn : 'a t -> Key.t -> 'a
                  val enqueue :
                    'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                  val enqueue_exn : 'a t -> Key.t -> '-> unit
                  val first : 'a t -> 'a option
                  val keys : 'a t -> Key.t list
                  val dequeue : 'a t -> 'a option
                  val dequeue_exn : 'a t -> 'a
                  val dequeue_with_key : 'a t -> (Key.t * 'a) option
                  val dequeue_with_key_exn : 'a t -> Key.t * 'a
                  val dequeue_all : 'a t -> f:('-> unit) -> unit
                  val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                  val remove_exn : 'a t -> Key.t -> unit
                  val replace : 'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                  val replace_exn : 'a t -> Key.t -> '-> unit
                  val iteri :
                    'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                  val foldi :
                    'a t ->
                    init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                end
              val pp : Format.formatter -> t -> unit
              val t_of_sexp : Sexplib.Sexp.t -> t
              val sexp_of_t : t -> Sexplib.Sexp.t
              val bin_t : t Bin_prot.Type_class.t
              val bin_read_t : t Bin_prot.Read.reader
              val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
              val bin_reader_t : t Bin_prot.Type_class.reader
              val bin_size_t : t Bin_prot.Size.sizer
              val bin_write_t : t Bin_prot.Write.writer
              val bin_writer_t : t Bin_prot.Type_class.writer
              val of_json : Ezjsonm.t -> t
              val to_json : t -> Ezjsonm.t
              val of_raw : string -> t
              val to_raw : t -> string
              val of_bytes : Core_kernel.Std.Bigstring.t -> t
              val of_bytes' : string -> t
              val master : t
            end
          module Value :
            sig
              type t = value
              val of_string : string -> t
              val to_string : t -> string
              val ( >= ) : t -> t -> bool
              val ( <= ) : t -> t -> bool
              val ( = ) : t -> t -> bool
              val ( > ) : t -> t -> bool
              val ( < ) : t -> t -> bool
              val ( <> ) : t -> t -> bool
              val equal : t -> t -> bool
              val compare : t -> t -> int
              val min : t -> t -> t
              val max : t -> t -> t
              val ascending : t -> t -> int
              val descending : t -> t -> int
              val between : t -> low:t -> high:t -> bool
              module Replace_polymorphic_compare :
                sig
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val _squelch_unused_module_warning_ : unit
                end
              type comparator_witness
              val validate_lbound :
                min:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val validate_ubound :
                max:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val validate_bound :
                min:t Core_kernel.Comparable_intf.bound ->
                max:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val comparator :
                (t, comparator_witness) Core_kernel.Comparator.comparator
              module Map :
                sig
                  module Key :
                    sig
                      type t = t
                      type comparator_witness = comparator_witness
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                    end
                  module Tree :
                    sig
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.Tree.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'a t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'a t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                    end
                  type 'a t =
                      (Key.t, 'a, Key.comparator_witness)
                      Core_kernel.Core_map.t
                  val empty : 'a t
                  val singleton : Key.t -> '-> 'a t
                  val of_alist :
                    (Key.t * 'a) list ->
                    [ `Duplicate_key of Key.t | `Ok of 'a t ]
                  val of_alist_or_error :
                    (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                  val of_alist_exn : (Key.t * 'a) list -> 'a t
                  val of_alist_multi : (Key.t * 'a) list -> 'a list t
                  val of_alist_fold :
                    (Key.t * 'a) list ->
                    init:'-> f:('-> '-> 'b) -> 'b t
                  val of_alist_reduce :
                    (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                  val of_sorted_array :
                    (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : (Key.t * 'a) array -> 'a t
                  val of_tree : 'Tree.t -> 'a t
                  val invariants : 'a t -> bool
                  val is_empty : 'a t -> bool
                  val length : 'a t -> int
                  val add : 'a t -> key:Key.t -> data:'-> 'a t
                  val add_multi :
                    'a list t -> key:Key.t -> data:'-> 'a list t
                  val change :
                    'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                  val find : 'a t -> Key.t -> 'a option
                  val find_exn : 'a t -> Key.t -> 'a
                  val remove : 'a t -> Key.t -> 'a t
                  val mem : 'a t -> Key.t -> bool
                  val iter : 'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                  val iter2 :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       data:[ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       unit) ->
                    unit
                  val map : 'a t -> f:('-> 'b) -> 'b t
                  val mapi : 'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                  val fold :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val fold_right :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val filter :
                    'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                  val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                  val filter_mapi :
                    'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                  val compare_direct :
                    ('-> '-> int) -> 'a t -> 'a t -> int
                  val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                  val keys : 'a t -> Key.t list
                  val data : 'a t -> 'a list
                  val to_alist : 'a t -> (Key.t * 'a) list
                  val validate :
                    name:(Key.t -> string) ->
                    'Core_kernel.Validate.check ->
                    'a t Core_kernel.Validate.check
                  val merge :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       'c option) ->
                    'c t
                  val symmetric_diff :
                    'a t ->
                    'a t ->
                    data_equal:('-> '-> bool) ->
                    (Key.t *
                     [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                    Core_kernel.Sequence.t
                  val min_elt : 'a t -> (Key.t * 'a) option
                  val min_elt_exn : 'a t -> Key.t * 'a
                  val max_elt : 'a t -> (Key.t * 'a) option
                  val max_elt_exn : 'a t -> Key.t * 'a
                  val for_all : 'a t -> f:('-> bool) -> bool
                  val exists : 'a t -> f:('-> bool) -> bool
                  val fold_range_inclusive :
                    'a t ->
                    min:Key.t ->
                    max:Key.t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val range_to_alist :
                    'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                  val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val rank : 'a t -> Key.t -> int option
                  val to_tree : 'a t -> 'Tree.t
                  val to_sequence :
                    ?keys_in:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Key.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Key.t ] ->
                    'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                  val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Set :
                sig
                  module Elt :
                    sig
                      type t = t
                      type comparator_witness = comparator_witness
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                    end
                  module Tree :
                    sig
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.Tree.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.Tree.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.Tree.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                    end
                  type t =
                      (Elt.t, Elt.comparator_witness) Core_kernel.Core_set.t
                  val length : t -> int
                  val is_empty : t -> bool
                  val iter : t -> f:(Elt.t -> unit) -> unit
                  val fold :
                    t ->
                    init:'accum -> f:('accum -> Elt.t -> 'accum) -> 'accum
                  val exists : t -> f:(Elt.t -> bool) -> bool
                  val for_all : t -> f:(Elt.t -> bool) -> bool
                  val count : t -> f:(Elt.t -> bool) -> int
                  val sum :
                    (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                    t -> f:(Elt.t -> 'sum) -> 'sum
                  val find : t -> f:(Elt.t -> bool) -> Elt.t option
                  val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                  val to_list : t -> Elt.t list
                  val to_array : t -> Elt.t array
                  val invariants : t -> bool
                  val mem : t -> Elt.t -> bool
                  val add : t -> Elt.t -> t
                  val remove : t -> Elt.t -> t
                  val union : t -> t -> t
                  val inter : t -> t -> t
                  val diff : t -> t -> t
                  val compare_direct : t -> t -> int
                  val equal : t -> t -> bool
                  val subset : t -> t -> bool
                  val fold_until :
                    t ->
                    init:'->
                    f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                    'b
                  val fold_right :
                    t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                  val iter2 :
                    t ->
                    t ->
                    f:([ `Both of Elt.t * Elt.t
                       | `Left of Elt.t
                       | `Right of Elt.t ] -> unit) ->
                    unit
                  val filter : t -> f:(Elt.t -> bool) -> t
                  val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                  val elements : t -> Elt.t list
                  val min_elt : t -> Elt.t option
                  val min_elt_exn : t -> Elt.t
                  val max_elt : t -> Elt.t option
                  val max_elt_exn : t -> Elt.t
                  val choose : t -> Elt.t option
                  val choose_exn : t -> Elt.t
                  val split : t -> Elt.t -> t * bool * t
                  val group_by :
                    t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                  val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                  val find_index : t -> int -> Elt.t option
                  val remove_index : t -> int -> t
                  val to_tree : t -> Tree.t
                  val to_sequence :
                    ?in_:[ `Decreasing_order
                         | `Decreasing_order_less_than_or_equal_to of Elt.t
                         | `Increasing_order
                         | `Increasing_order_greater_than_or_equal_to of
                             Elt.t ] ->
                    t -> Elt.t Core_kernel.Sequence.t
                  val to_map :
                    t ->
                    f:(Elt.t -> 'data) ->
                    (Elt.t, 'data, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t
                  val empty : t
                  val singleton : Elt.t -> t
                  val union_list : t list -> t
                  val of_list : Elt.t list -> t
                  val of_array : Elt.t array -> t
                  val of_sorted_array :
                    Elt.t array -> t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : Elt.t array -> t
                  val stable_dedup_list : Elt.t list -> Elt.t list
                  val map :
                    ('a, 'b) Core_kernel.Core_set.t -> f:('-> Elt.t) -> t
                  val filter_map :
                    ('a, 'b) Core_kernel.Core_set.t ->
                    f:('-> Elt.t option) -> t
                  val of_tree : Tree.t -> t
                  val of_map_keys :
                    (Elt.t, 'a, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t -> t
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val compare : t -> t -> int
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_t : t Bin_prot.Type_class.t
                end
              module Hashable : sig type t = t end
              val hash : t -> int
              val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
              module Table :
                sig
                  type key = t
                  type ('a, 'b) hashtbl =
                      ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                  type 'b t = (key, 'b) hashtbl
                  type ('a, 'b) t_ = 'b t
                  type 'a key_ = key
                  val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
                  val create :
                    ('a key_, 'b, unit -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_report_all_dups :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_or_error :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     ('a, 'b) t_ Core_kernel.Or_error.t)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_exn :
                    ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_multi :
                    ('a key_, 'b list,
                     ('a key_ * 'b) list -> ('a, 'b list) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_mapped :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key_exn :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val group :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                  val clear : ('a, 'b) t_ -> unit
                  val copy : ('a, 'b) t_ -> ('a, 'b) t_
                  val invariant : ('a, 'b) t_ -> unit
                  val fold :
                    ('a, 'b) t_ ->
                    init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                  val iter :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
                  val existsi :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val for_alli :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val length : ('a, 'b) t_ -> int
                  val is_empty : ('a, 'b) t_ -> bool
                  val mem : ('a, 'b) t_ -> 'a key_ -> bool
                  val remove : ('a, 'b) t_ -> 'a key_ -> unit
                  val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                  val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val add :
                    ('a, 'b) t_ ->
                    key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                  val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val change :
                    ('a, 'b) t_ ->
                    'a key_ -> ('b option -> 'b option) -> unit
                  val add_multi :
                    ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                  val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                  val map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                  val filteri :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                  val partition_map :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:('-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_mapi :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:(key:'a key_ ->
                         data:'-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_tf :
                    ('a, 'b) t_ ->
                    f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                  val partitioni_tf :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) ->
                    ('a, 'b) t_ * ('a, 'b) t_
                  val find_or_add :
                    ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                  val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                  val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                  val merge :
                    ('c,
                     ('k, 'a) t_ ->
                     ('k, 'b) t_ ->
                     f:(key:'k key_ ->
                        [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                        'c option) ->
                     ('k, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val merge_into :
                    f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                    src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                  val keys : ('a, 'b) t_ -> 'a key_ list
                  val data : ('a, 'b) t_ -> 'b list
                  val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
                  val filteri_inplace :
                    ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                  val equal :
                    ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
                  val similar :
                    ('a, 'b1) t_ ->
                    ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                  val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                  val validate :
                    name:('a key_ -> string) ->
                    'Core_kernel.Validate.check ->
                    ('a, 'b) t_ Core_kernel.Validate.check
                  val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Pooled_hashtbl :
                sig
                  type key = t
                  type ('a, 'b) hashtbl =
                      ('a, 'b) Core_kernel.Pooled_hashtbl.t
                  type 'b t = (key, 'b) hashtbl
                  type ('a, 'b) t_ = 'b t
                  type 'a key_ = key
                  val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
                  val create :
                    ('a key_, 'b, unit -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_report_all_dups :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_or_error :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     ('a, 'b) t_ Core_kernel.Or_error.t)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_exn :
                    ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_multi :
                    ('a key_, 'b list,
                     ('a key_ * 'b) list -> ('a, 'b list) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_mapped :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key_exn :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val group :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                  val clear : ('a, 'b) t_ -> unit
                  val copy : ('a, 'b) t_ -> ('a, 'b) t_
                  val invariant : ('a, 'b) t_ -> unit
                  val fold :
                    ('a, 'b) t_ ->
                    init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                  val iter :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
                  val existsi :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val for_alli :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val length : ('a, 'b) t_ -> int
                  val is_empty : ('a, 'b) t_ -> bool
                  val mem : ('a, 'b) t_ -> 'a key_ -> bool
                  val remove : ('a, 'b) t_ -> 'a key_ -> unit
                  val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                  val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val add :
                    ('a, 'b) t_ ->
                    key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                  val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val change :
                    ('a, 'b) t_ ->
                    'a key_ -> ('b option -> 'b option) -> unit
                  val add_multi :
                    ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                  val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                  val map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                  val filteri :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                  val partition_map :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:('-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_mapi :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:(key:'a key_ ->
                         data:'-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_tf :
                    ('a, 'b) t_ ->
                    f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                  val partitioni_tf :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) ->
                    ('a, 'b) t_ * ('a, 'b) t_
                  val find_or_add :
                    ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                  val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                  val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                  val merge :
                    ('c,
                     ('k, 'a) t_ ->
                     ('k, 'b) t_ ->
                     f:(key:'k key_ ->
                        [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                        'c option) ->
                     ('k, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val merge_into :
                    f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                    src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                  val keys : ('a, 'b) t_ -> 'a key_ list
                  val data : ('a, 'b) t_ -> 'b list
                  val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
                  val filteri_inplace :
                    ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                  val equal :
                    ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
                  val similar :
                    ('a, 'b1) t_ ->
                    ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                  val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                  val validate :
                    name:('a key_ -> string) ->
                    'Core_kernel.Validate.check ->
                    ('a, 'b) t_ Core_kernel.Validate.check
                  val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Hash_set :
                sig
                  type elt = t
                  type 'a hash_set = 'Core_kernel.Hash_set.t
                  type t = elt hash_set
                  type 'a t_ = t
                  type 'a elt_ = elt
                  val create :
                    ('a, unit -> 'a t_)
                    Core_kernel.Hash_set_intf.create_options_without_hashable
                  val of_list :
                    ('a, 'a elt_ list -> 'a t_)
                    Core_kernel.Hash_set_intf.create_options_without_hashable
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_t : t Bin_prot.Type_class.t
                end
              module Hash_queue :
                sig
                  module Key :
                    sig
                      type t = t
                      val hash : t -> int
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                    end
                  type 'a t
                  val length : 'a t -> int
                  val is_empty : 'a t -> bool
                  val iter : 'a t -> f:('-> unit) -> unit
                  val fold :
                    'a t ->
                    init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                  val exists : 'a t -> f:('-> bool) -> bool
                  val for_all : 'a t -> f:('-> bool) -> bool
                  val count : 'a t -> f:('-> bool) -> int
                  val sum :
                    (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                    'a t -> f:('-> 'sum) -> 'sum
                  val find : 'a t -> f:('-> bool) -> 'a option
                  val find_map : 'a t -> f:('-> 'b option) -> 'b option
                  val to_list : 'a t -> 'a list
                  val to_array : 'a t -> 'a array
                  val min_elt : 'a t -> cmp:('-> '-> int) -> 'a option
                  val max_elt : 'a t -> cmp:('-> '-> int) -> 'a option
                  val invariant : 'a t -> unit
                  val create : unit -> 'a t
                  val clear : 'a t -> unit
                  val mem : 'a t -> Key.t -> bool
                  val lookup : 'a t -> Key.t -> 'a option
                  val lookup_exn : 'a t -> Key.t -> 'a
                  val enqueue :
                    'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                  val enqueue_exn : 'a t -> Key.t -> '-> unit
                  val first : 'a t -> 'a option
                  val keys : 'a t -> Key.t list
                  val dequeue : 'a t -> 'a option
                  val dequeue_exn : 'a t -> 'a
                  val dequeue_with_key : 'a t -> (Key.t * 'a) option
                  val dequeue_with_key_exn : 'a t -> Key.t * 'a
                  val dequeue_all : 'a t -> f:('-> unit) -> unit
                  val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                  val remove_exn : 'a t -> Key.t -> unit
                  val replace : 'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                  val replace_exn : 'a t -> Key.t -> '-> unit
                  val iteri :
                    'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                  val foldi :
                    'a t ->
                    init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                end
              val pp : Format.formatter -> t -> unit
              val t_of_sexp : Sexplib.Sexp.t -> t
              val sexp_of_t : t -> Sexplib.Sexp.t
              val bin_t : t Bin_prot.Type_class.t
              val bin_read_t : t Bin_prot.Read.reader
              val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
              val bin_reader_t : t Bin_prot.Type_class.reader
              val bin_size_t : t Bin_prot.Size.sizer
              val bin_write_t : t Bin_prot.Write.writer
              val bin_writer_t : t Bin_prot.Type_class.writer
              val of_json : Ezjsonm.t -> t
              val to_json : t -> Ezjsonm.t
              val of_raw : string -> t
              val to_raw : t -> string
              val of_bytes : Core_kernel.Std.Bigstring.t -> t
              val of_bytes' : string -> t
            end
        end
      val block_t : t -> IrminBranch.STORE.Block.t
      val contents_t : t -> IrminBranch.STORE.Block.Contents.t
      val node_t : t -> IrminBranch.STORE.Block.Node.t
      val commit_t : t -> IrminBranch.STORE.Block.Commit.t
      val tag_t : t -> IrminBranch.STORE.Tag.t
      val create_head : IrminBranch.STORE.Block.key -> t Lwt.t
      val head : t -> IrminBranch.STORE.Block.key option Lwt.t
      val head_exn : t -> IrminBranch.STORE.Block.key Lwt.t
      val set_head : t -> IrminBranch.STORE.Block.key -> unit
      val read_node : t -> key -> IrminBranch.STORE.Block.node option Lwt.t
      val update_node :
        t -> origin -> key -> IrminBranch.STORE.Block.node -> unit Lwt.t
      val watch_node :
        t -> key -> (key * IrminBranch.STORE.Block.key) Lwt_stream.t
      val update_commit : t -> IrminBranch.STORE.Block.key -> unit Lwt.t
      val merge_commit :
        t ->
        ?origin:origin ->
        IrminBranch.STORE.Block.key -> unit IrminMerge.result Lwt.t
      module Key :
        sig
          type t = key
          val of_string : string -> t
          val to_string : t -> string
          val ( >= ) : t -> t -> bool
          val ( <= ) : t -> t -> bool
          val ( = ) : t -> t -> bool
          val ( > ) : t -> t -> bool
          val ( < ) : t -> t -> bool
          val ( <> ) : t -> t -> bool
          val equal : t -> t -> bool
          val compare : t -> t -> int
          val min : t -> t -> t
          val max : t -> t -> t
          val ascending : t -> t -> int
          val descending : t -> t -> int
          val between : t -> low:t -> high:t -> bool
          module Replace_polymorphic_compare :
            sig
              val ( >= ) : t -> t -> bool
              val ( <= ) : t -> t -> bool
              val ( = ) : t -> t -> bool
              val ( > ) : t -> t -> bool
              val ( < ) : t -> t -> bool
              val ( <> ) : t -> t -> bool
              val equal : t -> t -> bool
              val compare : t -> t -> int
              val min : t -> t -> t
              val max : t -> t -> t
              val _squelch_unused_module_warning_ : unit
            end
          type comparator_witness
          val validate_lbound :
            min:t Core_kernel.Comparable_intf.bound ->
            t Core_kernel.Validate.check
          val validate_ubound :
            max:t Core_kernel.Comparable_intf.bound ->
            t Core_kernel.Validate.check
          val validate_bound :
            min:t Core_kernel.Comparable_intf.bound ->
            max:t Core_kernel.Comparable_intf.bound ->
            t Core_kernel.Validate.check
          val comparator :
            (t, comparator_witness) Core_kernel.Comparator.comparator
          module Map :
            sig
              module Key :
                sig
                  type t = t
                  type comparator_witness = comparator_witness
                  val comparator :
                    (t, comparator_witness) Core_kernel.Comparator.comparator
                end
              module Tree :
                sig
                  type 'a t =
                      (Key.t, 'a, Key.comparator_witness)
                      Core_kernel.Core_map.Tree.t
                  val empty : 'a t
                  val singleton : Key.t -> '-> 'a t
                  val of_alist :
                    (Key.t * 'a) list ->
                    [ `Duplicate_key of Key.t | `Ok of 'a t ]
                  val of_alist_or_error :
                    (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                  val of_alist_exn : (Key.t * 'a) list -> 'a t
                  val of_alist_multi : (Key.t * 'a) list -> 'a list t
                  val of_alist_fold :
                    (Key.t * 'a) list ->
                    init:'-> f:('-> '-> 'b) -> 'b t
                  val of_alist_reduce :
                    (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                  val of_sorted_array :
                    (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : (Key.t * 'a) array -> 'a t
                  val of_tree : 'a t -> 'a t
                  val invariants : 'a t -> bool
                  val is_empty : 'a t -> bool
                  val length : 'a t -> int
                  val add : 'a t -> key:Key.t -> data:'-> 'a t
                  val add_multi :
                    'a list t -> key:Key.t -> data:'-> 'a list t
                  val change :
                    'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                  val find : 'a t -> Key.t -> 'a option
                  val find_exn : 'a t -> Key.t -> 'a
                  val remove : 'a t -> Key.t -> 'a t
                  val mem : 'a t -> Key.t -> bool
                  val iter : 'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                  val iter2 :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       data:[ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       unit) ->
                    unit
                  val map : 'a t -> f:('-> 'b) -> 'b t
                  val mapi : 'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                  val fold :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val fold_right :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val filter :
                    'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                  val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                  val filter_mapi :
                    'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                  val compare_direct :
                    ('-> '-> int) -> 'a t -> 'a t -> int
                  val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                  val keys : 'a t -> Key.t list
                  val data : 'a t -> 'a list
                  val to_alist : 'a t -> (Key.t * 'a) list
                  val validate :
                    name:(Key.t -> string) ->
                    'Core_kernel.Validate.check ->
                    'a t Core_kernel.Validate.check
                  val merge :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       'c option) ->
                    'c t
                  val symmetric_diff :
                    'a t ->
                    'a t ->
                    data_equal:('-> '-> bool) ->
                    (Key.t *
                     [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                    Core_kernel.Sequence.t
                  val min_elt : 'a t -> (Key.t * 'a) option
                  val min_elt_exn : 'a t -> Key.t * 'a
                  val max_elt : 'a t -> (Key.t * 'a) option
                  val max_elt_exn : 'a t -> Key.t * 'a
                  val for_all : 'a t -> f:('-> bool) -> bool
                  val exists : 'a t -> f:('-> bool) -> bool
                  val fold_range_inclusive :
                    'a t ->
                    min:Key.t ->
                    max:Key.t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val range_to_alist :
                    'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                  val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val rank : 'a t -> Key.t -> int option
                  val to_tree : 'a t -> 'a t
                  val to_sequence :
                    ?keys_in:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Key.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Key.t ] ->
                    'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                end
              type 'a t =
                  (Key.t, 'a, Key.comparator_witness) Core_kernel.Core_map.t
              val empty : 'a t
              val singleton : Key.t -> '-> 'a t
              val of_alist :
                (Key.t * 'a) list ->
                [ `Duplicate_key of Key.t | `Ok of 'a t ]
              val of_alist_or_error :
                (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
              val of_alist_exn : (Key.t * 'a) list -> 'a t
              val of_alist_multi : (Key.t * 'a) list -> 'a list t
              val of_alist_fold :
                (Key.t * 'a) list -> init:'-> f:('-> '-> 'b) -> 'b t
              val of_alist_reduce :
                (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
              val of_sorted_array :
                (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
              val of_sorted_array_unchecked : (Key.t * 'a) array -> 'a t
              val of_tree : 'Tree.t -> 'a t
              val invariants : 'a t -> bool
              val is_empty : 'a t -> bool
              val length : 'a t -> int
              val add : 'a t -> key:Key.t -> data:'-> 'a t
              val add_multi : 'a list t -> key:Key.t -> data:'-> 'a list t
              val change : 'a t -> Key.t -> ('a option -> 'a option) -> 'a t
              val find : 'a t -> Key.t -> 'a option
              val find_exn : 'a t -> Key.t -> 'a
              val remove : 'a t -> Key.t -> 'a t
              val mem : 'a t -> Key.t -> bool
              val iter : 'a t -> f:(key:Key.t -> data:'-> unit) -> unit
              val iter2 :
                'a t ->
                'b t ->
                f:(key:Key.t ->
                   data:[ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                   unit) ->
                unit
              val map : 'a t -> f:('-> 'b) -> 'b t
              val mapi : 'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
              val fold :
                'a t -> init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
              val fold_right :
                'a t -> init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
              val filter : 'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
              val filter_map : 'a t -> f:('-> 'b option) -> 'b t
              val filter_mapi :
                'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
              val compare_direct : ('-> '-> int) -> 'a t -> 'a t -> int
              val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
              val keys : 'a t -> Key.t list
              val data : 'a t -> 'a list
              val to_alist : 'a t -> (Key.t * 'a) list
              val validate :
                name:(Key.t -> string) ->
                'Core_kernel.Validate.check ->
                'a t Core_kernel.Validate.check
              val merge :
                'a t ->
                'b t ->
                f:(key:Key.t ->
                   [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                   'c option) ->
                'c t
              val symmetric_diff :
                'a t ->
                'a t ->
                data_equal:('-> '-> bool) ->
                (Key.t * [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                Core_kernel.Sequence.t
              val min_elt : 'a t -> (Key.t * 'a) option
              val min_elt_exn : 'a t -> Key.t * 'a
              val max_elt : 'a t -> (Key.t * 'a) option
              val max_elt_exn : 'a t -> Key.t * 'a
              val for_all : 'a t -> f:('-> bool) -> bool
              val exists : 'a t -> f:('-> bool) -> bool
              val fold_range_inclusive :
                'a t ->
                min:Key.t ->
                max:Key.t ->
                init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
              val range_to_alist :
                'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
              val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
              val next_key : 'a t -> Key.t -> (Key.t * 'a) option
              val rank : 'a t -> Key.t -> int option
              val to_tree : 'a t -> 'Tree.t
              val to_sequence :
                ?keys_in:[ `Decreasing_order
                         | `Decreasing_order_less_than_or_equal_to of Key.t
                         | `Increasing_order
                         | `Increasing_order_greater_than_or_equal_to of
                             Key.t ] ->
                'a t -> (Key.t * 'a) Core_kernel.Sequence.t
              val t_of_sexp :
                (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
              val sexp_of_t :
                ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
              val compare : ('-> '-> int) -> 'a t -> 'a t -> int
              val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
              val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
              val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
              val __bin_read_t__ : ('a, int -> 'a t) Bin_prot.Read.reader1
              val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
              val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
              val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
            end
          module Set :
            sig
              module Elt :
                sig
                  type t = t
                  type comparator_witness = comparator_witness
                  val comparator :
                    (t, comparator_witness) Core_kernel.Comparator.comparator
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                end
              module Tree :
                sig
                  type t =
                      (Elt.t, Elt.comparator_witness)
                      Core_kernel.Core_set.Tree.t
                  val length : t -> int
                  val is_empty : t -> bool
                  val iter : t -> f:(Elt.t -> unit) -> unit
                  val fold :
                    t ->
                    init:'accum -> f:('accum -> Elt.t -> 'accum) -> 'accum
                  val exists : t -> f:(Elt.t -> bool) -> bool
                  val for_all : t -> f:(Elt.t -> bool) -> bool
                  val count : t -> f:(Elt.t -> bool) -> int
                  val sum :
                    (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                    t -> f:(Elt.t -> 'sum) -> 'sum
                  val find : t -> f:(Elt.t -> bool) -> Elt.t option
                  val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                  val to_list : t -> Elt.t list
                  val to_array : t -> Elt.t array
                  val invariants : t -> bool
                  val mem : t -> Elt.t -> bool
                  val add : t -> Elt.t -> t
                  val remove : t -> Elt.t -> t
                  val union : t -> t -> t
                  val inter : t -> t -> t
                  val diff : t -> t -> t
                  val compare_direct : t -> t -> int
                  val equal : t -> t -> bool
                  val subset : t -> t -> bool
                  val fold_until :
                    t ->
                    init:'->
                    f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                    'b
                  val fold_right :
                    t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                  val iter2 :
                    t ->
                    t ->
                    f:([ `Both of Elt.t * Elt.t
                       | `Left of Elt.t
                       | `Right of Elt.t ] -> unit) ->
                    unit
                  val filter : t -> f:(Elt.t -> bool) -> t
                  val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                  val elements : t -> Elt.t list
                  val min_elt : t -> Elt.t option
                  val min_elt_exn : t -> Elt.t
                  val max_elt : t -> Elt.t option
                  val max_elt_exn : t -> Elt.t
                  val choose : t -> Elt.t option
                  val choose_exn : t -> Elt.t
                  val split : t -> Elt.t -> t * bool * t
                  val group_by :
                    t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                  val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                  val find_index : t -> int -> Elt.t option
                  val remove_index : t -> int -> t
                  val to_tree : t -> t
                  val to_sequence :
                    ?in_:[ `Decreasing_order
                         | `Decreasing_order_less_than_or_equal_to of Elt.t
                         | `Increasing_order
                         | `Increasing_order_greater_than_or_equal_to of
                             Elt.t ] ->
                    t -> Elt.t Core_kernel.Sequence.t
                  val to_map :
                    t ->
                    f:(Elt.t -> 'data) ->
                    (Elt.t, 'data, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t
                  val empty : t
                  val singleton : Elt.t -> t
                  val union_list : t list -> t
                  val of_list : Elt.t list -> t
                  val of_array : Elt.t array -> t
                  val of_sorted_array :
                    Elt.t array -> t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : Elt.t array -> t
                  val stable_dedup_list : Elt.t list -> Elt.t list
                  val map :
                    ('a, 'b) Core_kernel.Core_set.Tree.t ->
                    f:('-> Elt.t) -> t
                  val filter_map :
                    ('a, 'b) Core_kernel.Core_set.Tree.t ->
                    f:('-> Elt.t option) -> t
                  val of_tree : t -> t
                  val of_map_keys :
                    (Elt.t, 'a, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t -> t
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val compare : t -> t -> int
                end
              type t = (Elt.t, Elt.comparator_witness) Core_kernel.Core_set.t
              val length : t -> int
              val is_empty : t -> bool
              val iter : t -> f:(Elt.t -> unit) -> unit
              val fold :
                t -> init:'accum -> f:('accum -> Elt.t -> 'accum) -> 'accum
              val exists : t -> f:(Elt.t -> bool) -> bool
              val for_all : t -> f:(Elt.t -> bool) -> bool
              val count : t -> f:(Elt.t -> bool) -> int
              val sum :
                (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                t -> f:(Elt.t -> 'sum) -> 'sum
              val find : t -> f:(Elt.t -> bool) -> Elt.t option
              val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
              val to_list : t -> Elt.t list
              val to_array : t -> Elt.t array
              val invariants : t -> bool
              val mem : t -> Elt.t -> bool
              val add : t -> Elt.t -> t
              val remove : t -> Elt.t -> t
              val union : t -> t -> t
              val inter : t -> t -> t
              val diff : t -> t -> t
              val compare_direct : t -> t -> int
              val equal : t -> t -> bool
              val subset : t -> t -> bool
              val fold_until :
                t ->
                init:'->
                f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) -> 'b
              val fold_right : t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
              val iter2 :
                t ->
                t ->
                f:([ `Both of Elt.t * Elt.t
                   | `Left of Elt.t
                   | `Right of Elt.t ] -> unit) ->
                unit
              val filter : t -> f:(Elt.t -> bool) -> t
              val partition_tf : t -> f:(Elt.t -> bool) -> t * t
              val elements : t -> Elt.t list
              val min_elt : t -> Elt.t option
              val min_elt_exn : t -> Elt.t
              val max_elt : t -> Elt.t option
              val max_elt_exn : t -> Elt.t
              val choose : t -> Elt.t option
              val choose_exn : t -> Elt.t
              val split : t -> Elt.t -> t * bool * t
              val group_by : t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
              val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
              val find_index : t -> int -> Elt.t option
              val remove_index : t -> int -> t
              val to_tree : t -> Tree.t
              val to_sequence :
                ?in_:[ `Decreasing_order
                     | `Decreasing_order_less_than_or_equal_to of Elt.t
                     | `Increasing_order
                     | `Increasing_order_greater_than_or_equal_to of Elt.t ] ->
                t -> Elt.t Core_kernel.Sequence.t
              val to_map :
                t ->
                f:(Elt.t -> 'data) ->
                (Elt.t, 'data, Elt.comparator_witness)
                Core_kernel.Core_set_intf.Map.t
              val empty : t
              val singleton : Elt.t -> t
              val union_list : t list -> t
              val of_list : Elt.t list -> t
              val of_array : Elt.t array -> t
              val of_sorted_array : Elt.t array -> t Core_kernel.Or_error.t
              val of_sorted_array_unchecked : Elt.t array -> t
              val stable_dedup_list : Elt.t list -> Elt.t list
              val map :
                ('a, 'b) Core_kernel.Core_set.t -> f:('-> Elt.t) -> t
              val filter_map :
                ('a, 'b) Core_kernel.Core_set.t ->
                f:('-> Elt.t option) -> t
              val of_tree : Tree.t -> t
              val of_map_keys :
                (Elt.t, 'a, Elt.comparator_witness)
                Core_kernel.Core_set_intf.Map.t -> t
              val t_of_sexp : Sexplib.Sexp.t -> t
              val sexp_of_t : t -> Sexplib.Sexp.t
              val compare : t -> t -> int
              val bin_size_t : t Bin_prot.Size.sizer
              val bin_write_t : t Bin_prot.Write.writer
              val bin_read_t : t Bin_prot.Read.reader
              val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
              val bin_writer_t : t Bin_prot.Type_class.writer
              val bin_reader_t : t Bin_prot.Type_class.reader
              val bin_t : t Bin_prot.Type_class.t
            end
          module Hashable : sig type t = t end
          val hash : t -> int
          val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
          module Table :
            sig
              type key = t
              type ('a, 'b) hashtbl = ('a, 'b) Core_kernel.Hashable.Hashtbl.t
              type 'b t = (key, 'b) hashtbl
              type ('a, 'b) t_ = 'b t
              type 'a key_ = key
              val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
              val create :
                ('a key_, 'b, unit -> ('a, 'b) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist :
                ('a key_, 'b,
                 ('a key_ * 'b) list ->
                 [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_report_all_dups :
                ('a key_, 'b,
                 ('a key_ * 'b) list ->
                 [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_or_error :
                ('a key_, 'b,
                 ('a key_ * 'b) list -> ('a, 'b) t_ Core_kernel.Or_error.t)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_exn :
                ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_multi :
                ('a key_, 'b list, ('a key_ * 'b) list -> ('a, 'b list) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val create_mapped :
                ('a key_, 'b,
                 get_key:('-> 'a key_) ->
                 get_data:('-> 'b) ->
                 'r list ->
                 [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val create_with_key :
                ('a key_, 'r,
                 get_key:('-> 'a key_) ->
                 'r list ->
                 [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val create_with_key_exn :
                ('a key_, 'r,
                 get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val group :
                ('a key_, 'b,
                 get_key:('-> 'a key_) ->
                 get_data:('-> 'b) ->
                 combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
              val clear : ('a, 'b) t_ -> unit
              val copy : ('a, 'b) t_ -> ('a, 'b) t_
              val invariant : ('a, 'b) t_ -> unit
              val fold :
                ('a, 'b) t_ ->
                init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
              val iter :
                ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
              val existsi :
                ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
              val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
              val for_alli :
                ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
              val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
              val length : ('a, 'b) t_ -> int
              val is_empty : ('a, 'b) t_ -> bool
              val mem : ('a, 'b) t_ -> 'a key_ -> bool
              val remove : ('a, 'b) t_ -> 'a key_ -> unit
              val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
              val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
              val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
              val add :
                ('a, 'b) t_ -> key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
              val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
              val change :
                ('a, 'b) t_ -> 'a key_ -> ('b option -> 'b option) -> unit
              val add_multi :
                ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
              val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
              val map :
                ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val mapi :
                ('c,
                 ('a, 'b) t_ ->
                 f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val filter_map :
                ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val filter_mapi :
                ('c,
                 ('a, 'b) t_ ->
                 f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
              val filteri :
                ('a, 'b) t_ ->
                f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
              val partition_map :
                ('c,
                 ('d,
                  ('a, 'b) t_ ->
                  f:('-> [ `Fst of '| `Snd of 'd ]) ->
                  ('a, 'c) t_ * ('a, 'd) t_)
                 Core_kernel.Core_hashtbl_intf.no_map_options)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val partition_mapi :
                ('c,
                 ('d,
                  ('a, 'b) t_ ->
                  f:(key:'a key_ -> data:'-> [ `Fst of '| `Snd of 'd ]) ->
                  ('a, 'c) t_ * ('a, 'd) t_)
                 Core_kernel.Core_hashtbl_intf.no_map_options)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val partition_tf :
                ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
              val partitioni_tf :
                ('a, 'b) t_ ->
                f:(key:'a key_ -> data:'-> bool) ->
                ('a, 'b) t_ * ('a, 'b) t_
              val find_or_add :
                ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
              val find : ('a, 'b) t_ -> 'a key_ -> 'b option
              val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
              val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
              val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
              val merge :
                ('c,
                 ('k, 'a) t_ ->
                 ('k, 'b) t_ ->
                 f:(key:'k key_ ->
                    [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                    'c option) ->
                 ('k, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val merge_into :
                f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
              val keys : ('a, 'b) t_ -> 'a key_ list
              val data : ('a, 'b) t_ -> 'b list
              val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
              val filteri_inplace :
                ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
              val equal :
                ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
              val similar :
                ('a, 'b1) t_ -> ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
              val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
              val validate :
                name:('a key_ -> string) ->
                'Core_kernel.Validate.check ->
                ('a, 'b) t_ Core_kernel.Validate.check
              val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
              val t_of_sexp :
                (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
              val sexp_of_t :
                ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
              val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
              val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
              val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
              val __bin_read_t__ : ('a, int -> 'a t) Bin_prot.Read.reader1
              val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
              val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
              val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
            end
          module Pooled_hashtbl :
            sig
              type key = t
              type ('a, 'b) hashtbl = ('a, 'b) Core_kernel.Pooled_hashtbl.t
              type 'b t = (key, 'b) hashtbl
              type ('a, 'b) t_ = 'b t
              type 'a key_ = key
              val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
              val create :
                ('a key_, 'b, unit -> ('a, 'b) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist :
                ('a key_, 'b,
                 ('a key_ * 'b) list ->
                 [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_report_all_dups :
                ('a key_, 'b,
                 ('a key_ * 'b) list ->
                 [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_or_error :
                ('a key_, 'b,
                 ('a key_ * 'b) list -> ('a, 'b) t_ Core_kernel.Or_error.t)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_exn :
                ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_multi :
                ('a key_, 'b list, ('a key_ * 'b) list -> ('a, 'b list) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val create_mapped :
                ('a key_, 'b,
                 get_key:('-> 'a key_) ->
                 get_data:('-> 'b) ->
                 'r list ->
                 [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val create_with_key :
                ('a key_, 'r,
                 get_key:('-> 'a key_) ->
                 'r list ->
                 [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val create_with_key_exn :
                ('a key_, 'r,
                 get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val group :
                ('a key_, 'b,
                 get_key:('-> 'a key_) ->
                 get_data:('-> 'b) ->
                 combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
              val clear : ('a, 'b) t_ -> unit
              val copy : ('a, 'b) t_ -> ('a, 'b) t_
              val invariant : ('a, 'b) t_ -> unit
              val fold :
                ('a, 'b) t_ ->
                init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
              val iter :
                ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
              val existsi :
                ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
              val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
              val for_alli :
                ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
              val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
              val length : ('a, 'b) t_ -> int
              val is_empty : ('a, 'b) t_ -> bool
              val mem : ('a, 'b) t_ -> 'a key_ -> bool
              val remove : ('a, 'b) t_ -> 'a key_ -> unit
              val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
              val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
              val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
              val add :
                ('a, 'b) t_ -> key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
              val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
              val change :
                ('a, 'b) t_ -> 'a key_ -> ('b option -> 'b option) -> unit
              val add_multi :
                ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
              val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
              val map :
                ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val mapi :
                ('c,
                 ('a, 'b) t_ ->
                 f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val filter_map :
                ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val filter_mapi :
                ('c,
                 ('a, 'b) t_ ->
                 f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
              val filteri :
                ('a, 'b) t_ ->
                f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
              val partition_map :
                ('c,
                 ('d,
                  ('a, 'b) t_ ->
                  f:('-> [ `Fst of '| `Snd of 'd ]) ->
                  ('a, 'c) t_ * ('a, 'd) t_)
                 Core_kernel.Core_hashtbl_intf.no_map_options)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val partition_mapi :
                ('c,
                 ('d,
                  ('a, 'b) t_ ->
                  f:(key:'a key_ -> data:'-> [ `Fst of '| `Snd of 'd ]) ->
                  ('a, 'c) t_ * ('a, 'd) t_)
                 Core_kernel.Core_hashtbl_intf.no_map_options)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val partition_tf :
                ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
              val partitioni_tf :
                ('a, 'b) t_ ->
                f:(key:'a key_ -> data:'-> bool) ->
                ('a, 'b) t_ * ('a, 'b) t_
              val find_or_add :
                ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
              val find : ('a, 'b) t_ -> 'a key_ -> 'b option
              val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
              val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
              val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
              val merge :
                ('c,
                 ('k, 'a) t_ ->
                 ('k, 'b) t_ ->
                 f:(key:'k key_ ->
                    [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                    'c option) ->
                 ('k, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val merge_into :
                f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
              val keys : ('a, 'b) t_ -> 'a key_ list
              val data : ('a, 'b) t_ -> 'b list
              val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
              val filteri_inplace :
                ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
              val equal :
                ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
              val similar :
                ('a, 'b1) t_ -> ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
              val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
              val validate :
                name:('a key_ -> string) ->
                'Core_kernel.Validate.check ->
                ('a, 'b) t_ Core_kernel.Validate.check
              val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
              val t_of_sexp :
                (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
              val sexp_of_t :
                ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
              val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
              val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
              val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
              val __bin_read_t__ : ('a, int -> 'a t) Bin_prot.Read.reader1
              val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
              val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
              val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
            end
          module Hash_set :
            sig
              type elt = t
              type 'a hash_set = 'Core_kernel.Hash_set.t
              type t = elt hash_set
              type 'a t_ = t
              type 'a elt_ = elt
              val create :
                ('a, unit -> 'a t_)
                Core_kernel.Hash_set_intf.create_options_without_hashable
              val of_list :
                ('a, 'a elt_ list -> 'a t_)
                Core_kernel.Hash_set_intf.create_options_without_hashable
              val t_of_sexp : Sexplib.Sexp.t -> t
              val sexp_of_t : t -> Sexplib.Sexp.t
              val bin_size_t : t Bin_prot.Size.sizer
              val bin_write_t : t Bin_prot.Write.writer
              val bin_read_t : t Bin_prot.Read.reader
              val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
              val bin_writer_t : t Bin_prot.Type_class.writer
              val bin_reader_t : t Bin_prot.Type_class.reader
              val bin_t : t Bin_prot.Type_class.t
            end
          module Hash_queue :
            sig
              module Key :
                sig
                  type t = t
                  val hash : t -> int
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val compare : t -> t -> int
                end
              type 'a t
              val length : 'a t -> int
              val is_empty : 'a t -> bool
              val iter : 'a t -> f:('-> unit) -> unit
              val fold :
                'a t -> init:'accum -> f:('accum -> '-> 'accum) -> 'accum
              val exists : 'a t -> f:('-> bool) -> bool
              val for_all : 'a t -> f:('-> bool) -> bool
              val count : 'a t -> f:('-> bool) -> int
              val sum :
                (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                'a t -> f:('-> 'sum) -> 'sum
              val find : 'a t -> f:('-> bool) -> 'a option
              val find_map : 'a t -> f:('-> 'b option) -> 'b option
              val to_list : 'a t -> 'a list
              val to_array : 'a t -> 'a array
              val min_elt : 'a t -> cmp:('-> '-> int) -> 'a option
              val max_elt : 'a t -> cmp:('-> '-> int) -> 'a option
              val invariant : 'a t -> unit
              val create : unit -> 'a t
              val clear : 'a t -> unit
              val mem : 'a t -> Key.t -> bool
              val lookup : 'a t -> Key.t -> 'a option
              val lookup_exn : 'a t -> Key.t -> 'a
              val enqueue :
                'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
              val enqueue_exn : 'a t -> Key.t -> '-> unit
              val first : 'a t -> 'a option
              val keys : 'a t -> Key.t list
              val dequeue : 'a t -> 'a option
              val dequeue_exn : 'a t -> 'a
              val dequeue_with_key : 'a t -> (Key.t * 'a) option
              val dequeue_with_key_exn : 'a t -> Key.t * 'a
              val dequeue_all : 'a t -> f:('-> unit) -> unit
              val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
              val remove_exn : 'a t -> Key.t -> unit
              val replace : 'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
              val replace_exn : 'a t -> Key.t -> '-> unit
              val iteri : 'a t -> f:(key:Key.t -> data:'-> unit) -> unit
              val foldi :
                'a t -> init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
            end
          val pp : Format.formatter -> t -> unit
          val t_of_sexp : Sexplib.Sexp.t -> t
          val sexp_of_t : t -> Sexplib.Sexp.t
          val bin_t : t Bin_prot.Type_class.t
          val bin_read_t : t Bin_prot.Read.reader
          val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
          val bin_reader_t : t Bin_prot.Type_class.reader
          val bin_size_t : t Bin_prot.Size.sizer
          val bin_write_t : t Bin_prot.Write.writer
          val bin_writer_t : t Bin_prot.Type_class.writer
          val of_json : Ezjsonm.t -> t
          val to_json : t -> Ezjsonm.t
          val of_raw : string -> t
          val to_raw : t -> string
          val of_bytes : Core_kernel.Std.Bigstring.t -> t
          val of_bytes' : string -> t
        end
      module Value :
        sig
          type t = value
          val of_string : string -> t
          val to_string : t -> string
          val ( >= ) : t -> t -> bool
          val ( <= ) : t -> t -> bool
          val ( = ) : t -> t -> bool
          val ( > ) : t -> t -> bool
          val ( < ) : t -> t -> bool
          val ( <> ) : t -> t -> bool
          val equal : t -> t -> bool
          val compare : t -> t -> int
          val min : t -> t -> t
          val max : t -> t -> t
          val ascending : t -> t -> int
          val descending : t -> t -> int
          val between : t -> low:t -> high:t -> bool
          module Replace_polymorphic_compare :
            sig
              val ( >= ) : t -> t -> bool
              val ( <= ) : t -> t -> bool
              val ( = ) : t -> t -> bool
              val ( > ) : t -> t -> bool
              val ( < ) : t -> t -> bool
              val ( <> ) : t -> t -> bool
              val equal : t -> t -> bool
              val compare : t -> t -> int
              val min : t -> t -> t
              val max : t -> t -> t
              val _squelch_unused_module_warning_ : unit
            end
          type comparator_witness
          val validate_lbound :
            min:t Core_kernel.Comparable_intf.bound ->
            t Core_kernel.Validate.check
          val validate_ubound :
            max:t Core_kernel.Comparable_intf.bound ->
            t Core_kernel.Validate.check
          val validate_bound :
            min:t Core_kernel.Comparable_intf.bound ->
            max:t Core_kernel.Comparable_intf.bound ->
            t Core_kernel.Validate.check
          val comparator :
            (t, comparator_witness) Core_kernel.Comparator.comparator
          module Map :
            sig
              module Key :
                sig
                  type t = t
                  type comparator_witness = comparator_witness
                  val comparator :
                    (t, comparator_witness) Core_kernel.Comparator.comparator
                end
              module Tree :
                sig
                  type 'a t =
                      (Key.t, 'a, Key.comparator_witness)
                      Core_kernel.Core_map.Tree.t
                  val empty : 'a t
                  val singleton : Key.t -> '-> 'a t
                  val of_alist :
                    (Key.t * 'a) list ->
                    [ `Duplicate_key of Key.t | `Ok of 'a t ]
                  val of_alist_or_error :
                    (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                  val of_alist_exn : (Key.t * 'a) list -> 'a t
                  val of_alist_multi : (Key.t * 'a) list -> 'a list t
                  val of_alist_fold :
                    (Key.t * 'a) list ->
                    init:'-> f:('-> '-> 'b) -> 'b t
                  val of_alist_reduce :
                    (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                  val of_sorted_array :
                    (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : (Key.t * 'a) array -> 'a t
                  val of_tree : 'a t -> 'a t
                  val invariants : 'a t -> bool
                  val is_empty : 'a t -> bool
                  val length : 'a t -> int
                  val add : 'a t -> key:Key.t -> data:'-> 'a t
                  val add_multi :
                    'a list t -> key:Key.t -> data:'-> 'a list t
                  val change :
                    'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                  val find : 'a t -> Key.t -> 'a option
                  val find_exn : 'a t -> Key.t -> 'a
                  val remove : 'a t -> Key.t -> 'a t
                  val mem : 'a t -> Key.t -> bool
                  val iter : 'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                  val iter2 :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       data:[ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       unit) ->
                    unit
                  val map : 'a t -> f:('-> 'b) -> 'b t
                  val mapi : 'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                  val fold :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val fold_right :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val filter :
                    'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                  val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                  val filter_mapi :
                    'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                  val compare_direct :
                    ('-> '-> int) -> 'a t -> 'a t -> int
                  val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                  val keys : 'a t -> Key.t list
                  val data : 'a t -> 'a list
                  val to_alist : 'a t -> (Key.t * 'a) list
                  val validate :
                    name:(Key.t -> string) ->
                    'Core_kernel.Validate.check ->
                    'a t Core_kernel.Validate.check
                  val merge :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       'c option) ->
                    'c t
                  val symmetric_diff :
                    'a t ->
                    'a t ->
                    data_equal:('-> '-> bool) ->
                    (Key.t *
                     [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                    Core_kernel.Sequence.t
                  val min_elt : 'a t -> (Key.t * 'a) option
                  val min_elt_exn : 'a t -> Key.t * 'a
                  val max_elt : 'a t -> (Key.t * 'a) option
                  val max_elt_exn : 'a t -> Key.t * 'a
                  val for_all : 'a t -> f:('-> bool) -> bool
                  val exists : 'a t -> f:('-> bool) -> bool
                  val fold_range_inclusive :
                    'a t ->
                    min:Key.t ->
                    max:Key.t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val range_to_alist :
                    'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                  val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val rank : 'a t -> Key.t -> int option
                  val to_tree : 'a t -> 'a t
                  val to_sequence :
                    ?keys_in:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Key.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Key.t ] ->
                    'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                end
              type 'a t =
                  (Key.t, 'a, Key.comparator_witness) Core_kernel.Core_map.t
              val empty : 'a t
              val singleton : Key.t -> '-> 'a t
              val of_alist :
                (Key.t * 'a) list ->
                [ `Duplicate_key of Key.t | `Ok of 'a t ]
              val of_alist_or_error :
                (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
              val of_alist_exn : (Key.t * 'a) list -> 'a t
              val of_alist_multi : (Key.t * 'a) list -> 'a list t
              val of_alist_fold :
                (Key.t * 'a) list -> init:'-> f:('-> '-> 'b) -> 'b t
              val of_alist_reduce :
                (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
              val of_sorted_array :
                (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
              val of_sorted_array_unchecked : (Key.t * 'a) array -> 'a t
              val of_tree : 'Tree.t -> 'a t
              val invariants : 'a t -> bool
              val is_empty : 'a t -> bool
              val length : 'a t -> int
              val add : 'a t -> key:Key.t -> data:'-> 'a t
              val add_multi : 'a list t -> key:Key.t -> data:'-> 'a list t
              val change : 'a t -> Key.t -> ('a option -> 'a option) -> 'a t
              val find : 'a t -> Key.t -> 'a option
              val find_exn : 'a t -> Key.t -> 'a
              val remove : 'a t -> Key.t -> 'a t
              val mem : 'a t -> Key.t -> bool
              val iter : 'a t -> f:(key:Key.t -> data:'-> unit) -> unit
              val iter2 :
                'a t ->
                'b t ->
                f:(key:Key.t ->
                   data:[ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                   unit) ->
                unit
              val map : 'a t -> f:('-> 'b) -> 'b t
              val mapi : 'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
              val fold :
                'a t -> init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
              val fold_right :
                'a t -> init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
              val filter : 'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
              val filter_map : 'a t -> f:('-> 'b option) -> 'b t
              val filter_mapi :
                'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
              val compare_direct : ('-> '-> int) -> 'a t -> 'a t -> int
              val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
              val keys : 'a t -> Key.t list
              val data : 'a t -> 'a list
              val to_alist : 'a t -> (Key.t * 'a) list
              val validate :
                name:(Key.t -> string) ->
                'Core_kernel.Validate.check ->
                'a t Core_kernel.Validate.check
              val merge :
                'a t ->
                'b t ->
                f:(key:Key.t ->
                   [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                   'c option) ->
                'c t
              val symmetric_diff :
                'a t ->
                'a t ->
                data_equal:('-> '-> bool) ->
                (Key.t * [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                Core_kernel.Sequence.t
              val min_elt : 'a t -> (Key.t * 'a) option
              val min_elt_exn : 'a t -> Key.t * 'a
              val max_elt : 'a t -> (Key.t * 'a) option
              val max_elt_exn : 'a t -> Key.t * 'a
              val for_all : 'a t -> f:('-> bool) -> bool
              val exists : 'a t -> f:('-> bool) -> bool
              val fold_range_inclusive :
                'a t ->
                min:Key.t ->
                max:Key.t ->
                init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
              val range_to_alist :
                'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
              val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
              val next_key : 'a t -> Key.t -> (Key.t * 'a) option
              val rank : 'a t -> Key.t -> int option
              val to_tree : 'a t -> 'Tree.t
              val to_sequence :
                ?keys_in:[ `Decreasing_order
                         | `Decreasing_order_less_than_or_equal_to of Key.t
                         | `Increasing_order
                         | `Increasing_order_greater_than_or_equal_to of
                             Key.t ] ->
                'a t -> (Key.t * 'a) Core_kernel.Sequence.t
              val t_of_sexp :
                (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
              val sexp_of_t :
                ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
              val compare : ('-> '-> int) -> 'a t -> 'a t -> int
              val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
              val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
              val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
              val __bin_read_t__ : ('a, int -> 'a t) Bin_prot.Read.reader1
              val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
              val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
              val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
            end
          module Set :
            sig
              module Elt :
                sig
                  type t = t
                  type comparator_witness = comparator_witness
                  val comparator :
                    (t, comparator_witness) Core_kernel.Comparator.comparator
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                end
              module Tree :
                sig
                  type t =
                      (Elt.t, Elt.comparator_witness)
                      Core_kernel.Core_set.Tree.t
                  val length : t -> int
                  val is_empty : t -> bool
                  val iter : t -> f:(Elt.t -> unit) -> unit
                  val fold :
                    t ->
                    init:'accum -> f:('accum -> Elt.t -> 'accum) -> 'accum
                  val exists : t -> f:(Elt.t -> bool) -> bool
                  val for_all : t -> f:(Elt.t -> bool) -> bool
                  val count : t -> f:(Elt.t -> bool) -> int
                  val sum :
                    (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                    t -> f:(Elt.t -> 'sum) -> 'sum
                  val find : t -> f:(Elt.t -> bool) -> Elt.t option
                  val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                  val to_list : t -> Elt.t list
                  val to_array : t -> Elt.t array
                  val invariants : t -> bool
                  val mem : t -> Elt.t -> bool
                  val add : t -> Elt.t -> t
                  val remove : t -> Elt.t -> t
                  val union : t -> t -> t
                  val inter : t -> t -> t
                  val diff : t -> t -> t
                  val compare_direct : t -> t -> int
                  val equal : t -> t -> bool
                  val subset : t -> t -> bool
                  val fold_until :
                    t ->
                    init:'->
                    f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                    'b
                  val fold_right :
                    t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                  val iter2 :
                    t ->
                    t ->
                    f:([ `Both of Elt.t * Elt.t
                       | `Left of Elt.t
                       | `Right of Elt.t ] -> unit) ->
                    unit
                  val filter : t -> f:(Elt.t -> bool) -> t
                  val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                  val elements : t -> Elt.t list
                  val min_elt : t -> Elt.t option
                  val min_elt_exn : t -> Elt.t
                  val max_elt : t -> Elt.t option
                  val max_elt_exn : t -> Elt.t
                  val choose : t -> Elt.t option
                  val choose_exn : t -> Elt.t
                  val split : t -> Elt.t -> t * bool * t
                  val group_by :
                    t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                  val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                  val find_index : t -> int -> Elt.t option
                  val remove_index : t -> int -> t
                  val to_tree : t -> t
                  val to_sequence :
                    ?in_:[ `Decreasing_order
                         | `Decreasing_order_less_than_or_equal_to of Elt.t
                         | `Increasing_order
                         | `Increasing_order_greater_than_or_equal_to of
                             Elt.t ] ->
                    t -> Elt.t Core_kernel.Sequence.t
                  val to_map :
                    t ->
                    f:(Elt.t -> 'data) ->
                    (Elt.t, 'data, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t
                  val empty : t
                  val singleton : Elt.t -> t
                  val union_list : t list -> t
                  val of_list : Elt.t list -> t
                  val of_array : Elt.t array -> t
                  val of_sorted_array :
                    Elt.t array -> t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : Elt.t array -> t
                  val stable_dedup_list : Elt.t list -> Elt.t list
                  val map :
                    ('a, 'b) Core_kernel.Core_set.Tree.t ->
                    f:('-> Elt.t) -> t
                  val filter_map :
                    ('a, 'b) Core_kernel.Core_set.Tree.t ->
                    f:('-> Elt.t option) -> t
                  val of_tree : t -> t
                  val of_map_keys :
                    (Elt.t, 'a, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t -> t
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val compare : t -> t -> int
                end
              type t = (Elt.t, Elt.comparator_witness) Core_kernel.Core_set.t
              val length : t -> int
              val is_empty : t -> bool
              val iter : t -> f:(Elt.t -> unit) -> unit
              val fold :
                t -> init:'accum -> f:('accum -> Elt.t -> 'accum) -> 'accum
              val exists : t -> f:(Elt.t -> bool) -> bool
              val for_all : t -> f:(Elt.t -> bool) -> bool
              val count : t -> f:(Elt.t -> bool) -> int
              val sum :
                (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                t -> f:(Elt.t -> 'sum) -> 'sum
              val find : t -> f:(Elt.t -> bool) -> Elt.t option
              val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
              val to_list : t -> Elt.t list
              val to_array : t -> Elt.t array
              val invariants : t -> bool
              val mem : t -> Elt.t -> bool
              val add : t -> Elt.t -> t
              val remove : t -> Elt.t -> t
              val union : t -> t -> t
              val inter : t -> t -> t
              val diff : t -> t -> t
              val compare_direct : t -> t -> int
              val equal : t -> t -> bool
              val subset : t -> t -> bool
              val fold_until :
                t ->
                init:'->
                f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) -> 'b
              val fold_right : t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
              val iter2 :
                t ->
                t ->
                f:([ `Both of Elt.t * Elt.t
                   | `Left of Elt.t
                   | `Right of Elt.t ] -> unit) ->
                unit
              val filter : t -> f:(Elt.t -> bool) -> t
              val partition_tf : t -> f:(Elt.t -> bool) -> t * t
              val elements : t -> Elt.t list
              val min_elt : t -> Elt.t option
              val min_elt_exn : t -> Elt.t
              val max_elt : t -> Elt.t option
              val max_elt_exn : t -> Elt.t
              val choose : t -> Elt.t option
              val choose_exn : t -> Elt.t
              val split : t -> Elt.t -> t * bool * t
              val group_by : t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
              val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
              val find_index : t -> int -> Elt.t option
              val remove_index : t -> int -> t
              val to_tree : t -> Tree.t
              val to_sequence :
                ?in_:[ `Decreasing_order
                     | `Decreasing_order_less_than_or_equal_to of Elt.t
                     | `Increasing_order
                     | `Increasing_order_greater_than_or_equal_to of Elt.t ] ->
                t -> Elt.t Core_kernel.Sequence.t
              val to_map :
                t ->
                f:(Elt.t -> 'data) ->
                (Elt.t, 'data, Elt.comparator_witness)
                Core_kernel.Core_set_intf.Map.t
              val empty : t
              val singleton : Elt.t -> t
              val union_list : t list -> t
              val of_list : Elt.t list -> t
              val of_array : Elt.t array -> t
              val of_sorted_array : Elt.t array -> t Core_kernel.Or_error.t
              val of_sorted_array_unchecked : Elt.t array -> t
              val stable_dedup_list : Elt.t list -> Elt.t list
              val map :
                ('a, 'b) Core_kernel.Core_set.t -> f:('-> Elt.t) -> t
              val filter_map :
                ('a, 'b) Core_kernel.Core_set.t ->
                f:('-> Elt.t option) -> t
              val of_tree : Tree.t -> t
              val of_map_keys :
                (Elt.t, 'a, Elt.comparator_witness)
                Core_kernel.Core_set_intf.Map.t -> t
              val t_of_sexp : Sexplib.Sexp.t -> t
              val sexp_of_t : t -> Sexplib.Sexp.t
              val compare : t -> t -> int
              val bin_size_t : t Bin_prot.Size.sizer
              val bin_write_t : t Bin_prot.Write.writer
              val bin_read_t : t Bin_prot.Read.reader
              val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
              val bin_writer_t : t Bin_prot.Type_class.writer
              val bin_reader_t : t Bin_prot.Type_class.reader
              val bin_t : t Bin_prot.Type_class.t
            end
          module Hashable : sig type t = t end
          val hash : t -> int
          val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
          module Table :
            sig
              type key = t
              type ('a, 'b) hashtbl = ('a, 'b) Core_kernel.Hashable.Hashtbl.t
              type 'b t = (key, 'b) hashtbl
              type ('a, 'b) t_ = 'b t
              type 'a key_ = key
              val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
              val create :
                ('a key_, 'b, unit -> ('a, 'b) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist :
                ('a key_, 'b,
                 ('a key_ * 'b) list ->
                 [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_report_all_dups :
                ('a key_, 'b,
                 ('a key_ * 'b) list ->
                 [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_or_error :
                ('a key_, 'b,
                 ('a key_ * 'b) list -> ('a, 'b) t_ Core_kernel.Or_error.t)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_exn :
                ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_multi :
                ('a key_, 'b list, ('a key_ * 'b) list -> ('a, 'b list) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val create_mapped :
                ('a key_, 'b,
                 get_key:('-> 'a key_) ->
                 get_data:('-> 'b) ->
                 'r list ->
                 [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val create_with_key :
                ('a key_, 'r,
                 get_key:('-> 'a key_) ->
                 'r list ->
                 [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val create_with_key_exn :
                ('a key_, 'r,
                 get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val group :
                ('a key_, 'b,
                 get_key:('-> 'a key_) ->
                 get_data:('-> 'b) ->
                 combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
              val clear : ('a, 'b) t_ -> unit
              val copy : ('a, 'b) t_ -> ('a, 'b) t_
              val invariant : ('a, 'b) t_ -> unit
              val fold :
                ('a, 'b) t_ ->
                init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
              val iter :
                ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
              val existsi :
                ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
              val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
              val for_alli :
                ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
              val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
              val length : ('a, 'b) t_ -> int
              val is_empty : ('a, 'b) t_ -> bool
              val mem : ('a, 'b) t_ -> 'a key_ -> bool
              val remove : ('a, 'b) t_ -> 'a key_ -> unit
              val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
              val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
              val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
              val add :
                ('a, 'b) t_ -> key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
              val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
              val change :
                ('a, 'b) t_ -> 'a key_ -> ('b option -> 'b option) -> unit
              val add_multi :
                ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
              val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
              val map :
                ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val mapi :
                ('c,
                 ('a, 'b) t_ ->
                 f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val filter_map :
                ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val filter_mapi :
                ('c,
                 ('a, 'b) t_ ->
                 f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
              val filteri :
                ('a, 'b) t_ ->
                f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
              val partition_map :
                ('c,
                 ('d,
                  ('a, 'b) t_ ->
                  f:('-> [ `Fst of '| `Snd of 'd ]) ->
                  ('a, 'c) t_ * ('a, 'd) t_)
                 Core_kernel.Core_hashtbl_intf.no_map_options)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val partition_mapi :
                ('c,
                 ('d,
                  ('a, 'b) t_ ->
                  f:(key:'a key_ -> data:'-> [ `Fst of '| `Snd of 'd ]) ->
                  ('a, 'c) t_ * ('a, 'd) t_)
                 Core_kernel.Core_hashtbl_intf.no_map_options)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val partition_tf :
                ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
              val partitioni_tf :
                ('a, 'b) t_ ->
                f:(key:'a key_ -> data:'-> bool) ->
                ('a, 'b) t_ * ('a, 'b) t_
              val find_or_add :
                ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
              val find : ('a, 'b) t_ -> 'a key_ -> 'b option
              val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
              val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
              val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
              val merge :
                ('c,
                 ('k, 'a) t_ ->
                 ('k, 'b) t_ ->
                 f:(key:'k key_ ->
                    [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                    'c option) ->
                 ('k, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val merge_into :
                f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
              val keys : ('a, 'b) t_ -> 'a key_ list
              val data : ('a, 'b) t_ -> 'b list
              val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
              val filteri_inplace :
                ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
              val equal :
                ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
              val similar :
                ('a, 'b1) t_ -> ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
              val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
              val validate :
                name:('a key_ -> string) ->
                'Core_kernel.Validate.check ->
                ('a, 'b) t_ Core_kernel.Validate.check
              val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
              val t_of_sexp :
                (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
              val sexp_of_t :
                ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
              val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
              val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
              val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
              val __bin_read_t__ : ('a, int -> 'a t) Bin_prot.Read.reader1
              val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
              val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
              val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
            end
          module Pooled_hashtbl :
            sig
              type key = t
              type ('a, 'b) hashtbl = ('a, 'b) Core_kernel.Pooled_hashtbl.t
              type 'b t = (key, 'b) hashtbl
              type ('a, 'b) t_ = 'b t
              type 'a key_ = key
              val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
              val create :
                ('a key_, 'b, unit -> ('a, 'b) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist :
                ('a key_, 'b,
                 ('a key_ * 'b) list ->
                 [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_report_all_dups :
                ('a key_, 'b,
                 ('a key_ * 'b) list ->
                 [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_or_error :
                ('a key_, 'b,
                 ('a key_ * 'b) list -> ('a, 'b) t_ Core_kernel.Or_error.t)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_exn :
                ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_multi :
                ('a key_, 'b list, ('a key_ * 'b) list -> ('a, 'b list) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val create_mapped :
                ('a key_, 'b,
                 get_key:('-> 'a key_) ->
                 get_data:('-> 'b) ->
                 'r list ->
                 [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val create_with_key :
                ('a key_, 'r,
                 get_key:('-> 'a key_) ->
                 'r list ->
                 [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val create_with_key_exn :
                ('a key_, 'r,
                 get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val group :
                ('a key_, 'b,
                 get_key:('-> 'a key_) ->
                 get_data:('-> 'b) ->
                 combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
              val clear : ('a, 'b) t_ -> unit
              val copy : ('a, 'b) t_ -> ('a, 'b) t_
              val invariant : ('a, 'b) t_ -> unit
              val fold :
                ('a, 'b) t_ ->
                init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
              val iter :
                ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
              val existsi :
                ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
              val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
              val for_alli :
                ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
              val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
              val length : ('a, 'b) t_ -> int
              val is_empty : ('a, 'b) t_ -> bool
              val mem : ('a, 'b) t_ -> 'a key_ -> bool
              val remove : ('a, 'b) t_ -> 'a key_ -> unit
              val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
              val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
              val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
              val add :
                ('a, 'b) t_ -> key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
              val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
              val change :
                ('a, 'b) t_ -> 'a key_ -> ('b option -> 'b option) -> unit
              val add_multi :
                ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
              val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
              val map :
                ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val mapi :
                ('c,
                 ('a, 'b) t_ ->
                 f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val filter_map :
                ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val filter_mapi :
                ('c,
                 ('a, 'b) t_ ->
                 f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
              val filteri :
                ('a, 'b) t_ ->
                f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
              val partition_map :
                ('c,
                 ('d,
                  ('a, 'b) t_ ->
                  f:('-> [ `Fst of '| `Snd of 'd ]) ->
                  ('a, 'c) t_ * ('a, 'd) t_)
                 Core_kernel.Core_hashtbl_intf.no_map_options)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val partition_mapi :
                ('c,
                 ('d,
                  ('a, 'b) t_ ->
                  f:(key:'a key_ -> data:'-> [ `Fst of '| `Snd of 'd ]) ->
                  ('a, 'c) t_ * ('a, 'd) t_)
                 Core_kernel.Core_hashtbl_intf.no_map_options)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val partition_tf :
                ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
              val partitioni_tf :
                ('a, 'b) t_ ->
                f:(key:'a key_ -> data:'-> bool) ->
                ('a, 'b) t_ * ('a, 'b) t_
              val find_or_add :
                ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
              val find : ('a, 'b) t_ -> 'a key_ -> 'b option
              val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
              val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
              val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
              val merge :
                ('c,
                 ('k, 'a) t_ ->
                 ('k, 'b) t_ ->
                 f:(key:'k key_ ->
                    [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                    'c option) ->
                 ('k, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val merge_into :
                f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
              val keys : ('a, 'b) t_ -> 'a key_ list
              val data : ('a, 'b) t_ -> 'b list
              val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
              val filteri_inplace :
                ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
              val equal :
                ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
              val similar :
                ('a, 'b1) t_ -> ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
              val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
              val validate :
                name:('a key_ -> string) ->
                'Core_kernel.Validate.check ->
                ('a, 'b) t_ Core_kernel.Validate.check
              val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
              val t_of_sexp :
                (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
              val sexp_of_t :
                ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
              val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
              val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
              val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
              val __bin_read_t__ : ('a, int -> 'a t) Bin_prot.Read.reader1
              val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
              val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
              val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
            end
          module Hash_set :
            sig
              type elt = t
              type 'a hash_set = 'Core_kernel.Hash_set.t
              type t = elt hash_set
              type 'a t_ = t
              type 'a elt_ = elt
              val create :
                ('a, unit -> 'a t_)
                Core_kernel.Hash_set_intf.create_options_without_hashable
              val of_list :
                ('a, 'a elt_ list -> 'a t_)
                Core_kernel.Hash_set_intf.create_options_without_hashable
              val t_of_sexp : Sexplib.Sexp.t -> t
              val sexp_of_t : t -> Sexplib.Sexp.t
              val bin_size_t : t Bin_prot.Size.sizer
              val bin_write_t : t Bin_prot.Write.writer
              val bin_read_t : t Bin_prot.Read.reader
              val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
              val bin_writer_t : t Bin_prot.Type_class.writer
              val bin_reader_t : t Bin_prot.Type_class.reader
              val bin_t : t Bin_prot.Type_class.t
            end
          module Hash_queue :
            sig
              module Key :
                sig
                  type t = t
                  val hash : t -> int
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val compare : t -> t -> int
                end
              type 'a t
              val length : 'a t -> int
              val is_empty : 'a t -> bool
              val iter : 'a t -> f:('-> unit) -> unit
              val fold :
                'a t -> init:'accum -> f:('accum -> '-> 'accum) -> 'accum
              val exists : 'a t -> f:('-> bool) -> bool
              val for_all : 'a t -> f:('-> bool) -> bool
              val count : 'a t -> f:('-> bool) -> int
              val sum :
                (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                'a t -> f:('-> 'sum) -> 'sum
              val find : 'a t -> f:('-> bool) -> 'a option
              val find_map : 'a t -> f:('-> 'b option) -> 'b option
              val to_list : 'a t -> 'a list
              val to_array : 'a t -> 'a array
              val min_elt : 'a t -> cmp:('-> '-> int) -> 'a option
              val max_elt : 'a t -> cmp:('-> '-> int) -> 'a option
              val invariant : 'a t -> unit
              val create : unit -> 'a t
              val clear : 'a t -> unit
              val mem : 'a t -> Key.t -> bool
              val lookup : 'a t -> Key.t -> 'a option
              val lookup_exn : 'a t -> Key.t -> 'a
              val enqueue :
                'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
              val enqueue_exn : 'a t -> Key.t -> '-> unit
              val first : 'a t -> 'a option
              val keys : 'a t -> Key.t list
              val dequeue : 'a t -> 'a option
              val dequeue_exn : 'a t -> 'a
              val dequeue_with_key : 'a t -> (Key.t * 'a) option
              val dequeue_with_key_exn : 'a t -> Key.t * 'a
              val dequeue_all : 'a t -> f:('-> unit) -> unit
              val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
              val remove_exn : 'a t -> Key.t -> unit
              val replace : 'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
              val replace_exn : 'a t -> Key.t -> '-> unit
              val iteri : 'a t -> f:(key:Key.t -> data:'-> unit) -> unit
              val foldi :
                'a t -> init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
            end
          val pp : Format.formatter -> t -> unit
          val t_of_sexp : Sexplib.Sexp.t -> t
          val sexp_of_t : t -> Sexplib.Sexp.t
          val bin_t : t Bin_prot.Type_class.t
          val bin_read_t : t Bin_prot.Read.reader
          val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
          val bin_reader_t : t Bin_prot.Type_class.reader
          val bin_size_t : t Bin_prot.Size.sizer
          val bin_write_t : t Bin_prot.Write.writer
          val bin_writer_t : t Bin_prot.Type_class.writer
          val of_json : Ezjsonm.t -> t
          val to_json : t -> Ezjsonm.t
          val merge : t IrminMerge.t
        end
      module Branch :
        sig
          type t = branch
          val of_string : string -> t
          val to_string : t -> string
          val ( >= ) : t -> t -> bool
          val ( <= ) : t -> t -> bool
          val ( = ) : t -> t -> bool
          val ( > ) : t -> t -> bool
          val ( < ) : t -> t -> bool
          val ( <> ) : t -> t -> bool
          val equal : t -> t -> bool
          val compare : t -> t -> int
          val min : t -> t -> t
          val max : t -> t -> t
          val ascending : t -> t -> int
          val descending : t -> t -> int
          val between : t -> low:t -> high:t -> bool
          module Replace_polymorphic_compare :
            sig
              val ( >= ) : t -> t -> bool
              val ( <= ) : t -> t -> bool
              val ( = ) : t -> t -> bool
              val ( > ) : t -> t -> bool
              val ( < ) : t -> t -> bool
              val ( <> ) : t -> t -> bool
              val equal : t -> t -> bool
              val compare : t -> t -> int
              val min : t -> t -> t
              val max : t -> t -> t
              val _squelch_unused_module_warning_ : unit
            end
          type comparator_witness
          val validate_lbound :
            min:t Core_kernel.Comparable_intf.bound ->
            t Core_kernel.Validate.check
          val validate_ubound :
            max:t Core_kernel.Comparable_intf.bound ->
            t Core_kernel.Validate.check
          val validate_bound :
            min:t Core_kernel.Comparable_intf.bound ->
            max:t Core_kernel.Comparable_intf.bound ->
            t Core_kernel.Validate.check
          val comparator :
            (t, comparator_witness) Core_kernel.Comparator.comparator
          module Map :
            sig
              module Key :
                sig
                  type t = t
                  type comparator_witness = comparator_witness
                  val comparator :
                    (t, comparator_witness) Core_kernel.Comparator.comparator
                end
              module Tree :
                sig
                  type 'a t =
                      (Key.t, 'a, Key.comparator_witness)
                      Core_kernel.Core_map.Tree.t
                  val empty : 'a t
                  val singleton : Key.t -> '-> 'a t
                  val of_alist :
                    (Key.t * 'a) list ->
                    [ `Duplicate_key of Key.t | `Ok of 'a t ]
                  val of_alist_or_error :
                    (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                  val of_alist_exn : (Key.t * 'a) list -> 'a t
                  val of_alist_multi : (Key.t * 'a) list -> 'a list t
                  val of_alist_fold :
                    (Key.t * 'a) list ->
                    init:'-> f:('-> '-> 'b) -> 'b t
                  val of_alist_reduce :
                    (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                  val of_sorted_array :
                    (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : (Key.t * 'a) array -> 'a t
                  val of_tree : 'a t -> 'a t
                  val invariants : 'a t -> bool
                  val is_empty : 'a t -> bool
                  val length : 'a t -> int
                  val add : 'a t -> key:Key.t -> data:'-> 'a t
                  val add_multi :
                    'a list t -> key:Key.t -> data:'-> 'a list t
                  val change :
                    'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                  val find : 'a t -> Key.t -> 'a option
                  val find_exn : 'a t -> Key.t -> 'a
                  val remove : 'a t -> Key.t -> 'a t
                  val mem : 'a t -> Key.t -> bool
                  val iter : 'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                  val iter2 :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       data:[ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       unit) ->
                    unit
                  val map : 'a t -> f:('-> 'b) -> 'b t
                  val mapi : 'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                  val fold :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val fold_right :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val filter :
                    'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                  val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                  val filter_mapi :
                    'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                  val compare_direct :
                    ('-> '-> int) -> 'a t -> 'a t -> int
                  val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                  val keys : 'a t -> Key.t list
                  val data : 'a t -> 'a list
                  val to_alist : 'a t -> (Key.t * 'a) list
                  val validate :
                    name:(Key.t -> string) ->
                    'Core_kernel.Validate.check ->
                    'a t Core_kernel.Validate.check
                  val merge :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       'c option) ->
                    'c t
                  val symmetric_diff :
                    'a t ->
                    'a t ->
                    data_equal:('-> '-> bool) ->
                    (Key.t *
                     [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                    Core_kernel.Sequence.t
                  val min_elt : 'a t -> (Key.t * 'a) option
                  val min_elt_exn : 'a t -> Key.t * 'a
                  val max_elt : 'a t -> (Key.t * 'a) option
                  val max_elt_exn : 'a t -> Key.t * 'a
                  val for_all : 'a t -> f:('-> bool) -> bool
                  val exists : 'a t -> f:('-> bool) -> bool
                  val fold_range_inclusive :
                    'a t ->
                    min:Key.t ->
                    max:Key.t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val range_to_alist :
                    'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                  val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val rank : 'a t -> Key.t -> int option
                  val to_tree : 'a t -> 'a t
                  val to_sequence :
                    ?keys_in:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Key.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Key.t ] ->
                    'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                end
              type 'a t =
                  (Key.t, 'a, Key.comparator_witness) Core_kernel.Core_map.t
              val empty : 'a t
              val singleton : Key.t -> '-> 'a t
              val of_alist :
                (Key.t * 'a) list ->
                [ `Duplicate_key of Key.t | `Ok of 'a t ]
              val of_alist_or_error :
                (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
              val of_alist_exn : (Key.t * 'a) list -> 'a t
              val of_alist_multi : (Key.t * 'a) list -> 'a list t
              val of_alist_fold :
                (Key.t * 'a) list -> init:'-> f:('-> '-> 'b) -> 'b t
              val of_alist_reduce :
                (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
              val of_sorted_array :
                (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
              val of_sorted_array_unchecked : (Key.t * 'a) array -> 'a t
              val of_tree : 'Tree.t -> 'a t
              val invariants : 'a t -> bool
              val is_empty : 'a t -> bool
              val length : 'a t -> int
              val add : 'a t -> key:Key.t -> data:'-> 'a t
              val add_multi : 'a list t -> key:Key.t -> data:'-> 'a list t
              val change : 'a t -> Key.t -> ('a option -> 'a option) -> 'a t
              val find : 'a t -> Key.t -> 'a option
              val find_exn : 'a t -> Key.t -> 'a
              val remove : 'a t -> Key.t -> 'a t
              val mem : 'a t -> Key.t -> bool
              val iter : 'a t -> f:(key:Key.t -> data:'-> unit) -> unit
              val iter2 :
                'a t ->
                'b t ->
                f:(key:Key.t ->
                   data:[ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                   unit) ->
                unit
              val map : 'a t -> f:('-> 'b) -> 'b t
              val mapi : 'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
              val fold :
                'a t -> init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
              val fold_right :
                'a t -> init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
              val filter : 'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
              val filter_map : 'a t -> f:('-> 'b option) -> 'b t
              val filter_mapi :
                'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
              val compare_direct : ('-> '-> int) -> 'a t -> 'a t -> int
              val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
              val keys : 'a t -> Key.t list
              val data : 'a t -> 'a list
              val to_alist : 'a t -> (Key.t * 'a) list
              val validate :
                name:(Key.t -> string) ->
                'Core_kernel.Validate.check ->
                'a t Core_kernel.Validate.check
              val merge :
                'a t ->
                'b t ->
                f:(key:Key.t ->
                   [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                   'c option) ->
                'c t
              val symmetric_diff :
                'a t ->
                'a t ->
                data_equal:('-> '-> bool) ->
                (Key.t * [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                Core_kernel.Sequence.t
              val min_elt : 'a t -> (Key.t * 'a) option
              val min_elt_exn : 'a t -> Key.t * 'a
              val max_elt : 'a t -> (Key.t * 'a) option
              val max_elt_exn : 'a t -> Key.t * 'a
              val for_all : 'a t -> f:('-> bool) -> bool
              val exists : 'a t -> f:('-> bool) -> bool
              val fold_range_inclusive :
                'a t ->
                min:Key.t ->
                max:Key.t ->
                init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
              val range_to_alist :
                'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
              val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
              val next_key : 'a t -> Key.t -> (Key.t * 'a) option
              val rank : 'a t -> Key.t -> int option
              val to_tree : 'a t -> 'Tree.t
              val to_sequence :
                ?keys_in:[ `Decreasing_order
                         | `Decreasing_order_less_than_or_equal_to of Key.t
                         | `Increasing_order
                         | `Increasing_order_greater_than_or_equal_to of
                             Key.t ] ->
                'a t -> (Key.t * 'a) Core_kernel.Sequence.t
              val t_of_sexp :
                (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
              val sexp_of_t :
                ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
              val compare : ('-> '-> int) -> 'a t -> 'a t -> int
              val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
              val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
              val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
              val __bin_read_t__ : ('a, int -> 'a t) Bin_prot.Read.reader1
              val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
              val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
              val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
            end
          module Set :
            sig
              module Elt :
                sig
                  type t = t
                  type comparator_witness = comparator_witness
                  val comparator :
                    (t, comparator_witness) Core_kernel.Comparator.comparator
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                end
              module Tree :
                sig
                  type t =
                      (Elt.t, Elt.comparator_witness)
                      Core_kernel.Core_set.Tree.t
                  val length : t -> int
                  val is_empty : t -> bool
                  val iter : t -> f:(Elt.t -> unit) -> unit
                  val fold :
                    t ->
                    init:'accum -> f:('accum -> Elt.t -> 'accum) -> 'accum
                  val exists : t -> f:(Elt.t -> bool) -> bool
                  val for_all : t -> f:(Elt.t -> bool) -> bool
                  val count : t -> f:(Elt.t -> bool) -> int
                  val sum :
                    (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                    t -> f:(Elt.t -> 'sum) -> 'sum
                  val find : t -> f:(Elt.t -> bool) -> Elt.t option
                  val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                  val to_list : t -> Elt.t list
                  val to_array : t -> Elt.t array
                  val invariants : t -> bool
                  val mem : t -> Elt.t -> bool
                  val add : t -> Elt.t -> t
                  val remove : t -> Elt.t -> t
                  val union : t -> t -> t
                  val inter : t -> t -> t
                  val diff : t -> t -> t
                  val compare_direct : t -> t -> int
                  val equal : t -> t -> bool
                  val subset : t -> t -> bool
                  val fold_until :
                    t ->
                    init:'->
                    f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                    'b
                  val fold_right :
                    t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                  val iter2 :
                    t ->
                    t ->
                    f:([ `Both of Elt.t * Elt.t
                       | `Left of Elt.t
                       | `Right of Elt.t ] -> unit) ->
                    unit
                  val filter : t -> f:(Elt.t -> bool) -> t
                  val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                  val elements : t -> Elt.t list
                  val min_elt : t -> Elt.t option
                  val min_elt_exn : t -> Elt.t
                  val max_elt : t -> Elt.t option
                  val max_elt_exn : t -> Elt.t
                  val choose : t -> Elt.t option
                  val choose_exn : t -> Elt.t
                  val split : t -> Elt.t -> t * bool * t
                  val group_by :
                    t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                  val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                  val find_index : t -> int -> Elt.t option
                  val remove_index : t -> int -> t
                  val to_tree : t -> t
                  val to_sequence :
                    ?in_:[ `Decreasing_order
                         | `Decreasing_order_less_than_or_equal_to of Elt.t
                         | `Increasing_order
                         | `Increasing_order_greater_than_or_equal_to of
                             Elt.t ] ->
                    t -> Elt.t Core_kernel.Sequence.t
                  val to_map :
                    t ->
                    f:(Elt.t -> 'data) ->
                    (Elt.t, 'data, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t
                  val empty : t
                  val singleton : Elt.t -> t
                  val union_list : t list -> t
                  val of_list : Elt.t list -> t
                  val of_array : Elt.t array -> t
                  val of_sorted_array :
                    Elt.t array -> t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : Elt.t array -> t
                  val stable_dedup_list : Elt.t list -> Elt.t list
                  val map :
                    ('a, 'b) Core_kernel.Core_set.Tree.t ->
                    f:('-> Elt.t) -> t
                  val filter_map :
                    ('a, 'b) Core_kernel.Core_set.Tree.t ->
                    f:('-> Elt.t option) -> t
                  val of_tree : t -> t
                  val of_map_keys :
                    (Elt.t, 'a, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t -> t
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val compare : t -> t -> int
                end
              type t = (Elt.t, Elt.comparator_witness) Core_kernel.Core_set.t
              val length : t -> int
              val is_empty : t -> bool
              val iter : t -> f:(Elt.t -> unit) -> unit
              val fold :
                t -> init:'accum -> f:('accum -> Elt.t -> 'accum) -> 'accum
              val exists : t -> f:(Elt.t -> bool) -> bool
              val for_all : t -> f:(Elt.t -> bool) -> bool
              val count : t -> f:(Elt.t -> bool) -> int
              val sum :
                (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                t -> f:(Elt.t -> 'sum) -> 'sum
              val find : t -> f:(Elt.t -> bool) -> Elt.t option
              val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
              val to_list : t -> Elt.t list
              val to_array : t -> Elt.t array
              val invariants : t -> bool
              val mem : t -> Elt.t -> bool
              val add : t -> Elt.t -> t
              val remove : t -> Elt.t -> t
              val union : t -> t -> t
              val inter : t -> t -> t
              val diff : t -> t -> t
              val compare_direct : t -> t -> int
              val equal : t -> t -> bool
              val subset : t -> t -> bool
              val fold_until :
                t ->
                init:'->
                f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) -> 'b
              val fold_right : t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
              val iter2 :
                t ->
                t ->
                f:([ `Both of Elt.t * Elt.t
                   | `Left of Elt.t
                   | `Right of Elt.t ] -> unit) ->
                unit
              val filter : t -> f:(Elt.t -> bool) -> t
              val partition_tf : t -> f:(Elt.t -> bool) -> t * t
              val elements : t -> Elt.t list
              val min_elt : t -> Elt.t option
              val min_elt_exn : t -> Elt.t
              val max_elt : t -> Elt.t option
              val max_elt_exn : t -> Elt.t
              val choose : t -> Elt.t option
              val choose_exn : t -> Elt.t
              val split : t -> Elt.t -> t * bool * t
              val group_by : t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
              val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
              val find_index : t -> int -> Elt.t option
              val remove_index : t -> int -> t
              val to_tree : t -> Tree.t
              val to_sequence :
                ?in_:[ `Decreasing_order
                     | `Decreasing_order_less_than_or_equal_to of Elt.t
                     | `Increasing_order
                     | `Increasing_order_greater_than_or_equal_to of Elt.t ] ->
                t -> Elt.t Core_kernel.Sequence.t
              val to_map :
                t ->
                f:(Elt.t -> 'data) ->
                (Elt.t, 'data, Elt.comparator_witness)
                Core_kernel.Core_set_intf.Map.t
              val empty : t
              val singleton : Elt.t -> t
              val union_list : t list -> t
              val of_list : Elt.t list -> t
              val of_array : Elt.t array -> t
              val of_sorted_array : Elt.t array -> t Core_kernel.Or_error.t
              val of_sorted_array_unchecked : Elt.t array -> t
              val stable_dedup_list : Elt.t list -> Elt.t list
              val map :
                ('a, 'b) Core_kernel.Core_set.t -> f:('-> Elt.t) -> t
              val filter_map :
                ('a, 'b) Core_kernel.Core_set.t ->
                f:('-> Elt.t option) -> t
              val of_tree : Tree.t -> t
              val of_map_keys :
                (Elt.t, 'a, Elt.comparator_witness)
                Core_kernel.Core_set_intf.Map.t -> t
              val t_of_sexp : Sexplib.Sexp.t -> t
              val sexp_of_t : t -> Sexplib.Sexp.t
              val compare : t -> t -> int
              val bin_size_t : t Bin_prot.Size.sizer
              val bin_write_t : t Bin_prot.Write.writer
              val bin_read_t : t Bin_prot.Read.reader
              val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
              val bin_writer_t : t Bin_prot.Type_class.writer
              val bin_reader_t : t Bin_prot.Type_class.reader
              val bin_t : t Bin_prot.Type_class.t
            end
          module Hashable : sig type t = t end
          val hash : t -> int
          val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
          module Table :
            sig
              type key = t
              type ('a, 'b) hashtbl = ('a, 'b) Core_kernel.Hashable.Hashtbl.t
              type 'b t = (key, 'b) hashtbl
              type ('a, 'b) t_ = 'b t
              type 'a key_ = key
              val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
              val create :
                ('a key_, 'b, unit -> ('a, 'b) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist :
                ('a key_, 'b,
                 ('a key_ * 'b) list ->
                 [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_report_all_dups :
                ('a key_, 'b,
                 ('a key_ * 'b) list ->
                 [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_or_error :
                ('a key_, 'b,
                 ('a key_ * 'b) list -> ('a, 'b) t_ Core_kernel.Or_error.t)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_exn :
                ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_multi :
                ('a key_, 'b list, ('a key_ * 'b) list -> ('a, 'b list) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val create_mapped :
                ('a key_, 'b,
                 get_key:('-> 'a key_) ->
                 get_data:('-> 'b) ->
                 'r list ->
                 [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val create_with_key :
                ('a key_, 'r,
                 get_key:('-> 'a key_) ->
                 'r list ->
                 [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val create_with_key_exn :
                ('a key_, 'r,
                 get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val group :
                ('a key_, 'b,
                 get_key:('-> 'a key_) ->
                 get_data:('-> 'b) ->
                 combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
              val clear : ('a, 'b) t_ -> unit
              val copy : ('a, 'b) t_ -> ('a, 'b) t_
              val invariant : ('a, 'b) t_ -> unit
              val fold :
                ('a, 'b) t_ ->
                init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
              val iter :
                ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
              val existsi :
                ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
              val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
              val for_alli :
                ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
              val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
              val length : ('a, 'b) t_ -> int
              val is_empty : ('a, 'b) t_ -> bool
              val mem : ('a, 'b) t_ -> 'a key_ -> bool
              val remove : ('a, 'b) t_ -> 'a key_ -> unit
              val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
              val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
              val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
              val add :
                ('a, 'b) t_ -> key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
              val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
              val change :
                ('a, 'b) t_ -> 'a key_ -> ('b option -> 'b option) -> unit
              val add_multi :
                ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
              val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
              val map :
                ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val mapi :
                ('c,
                 ('a, 'b) t_ ->
                 f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val filter_map :
                ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val filter_mapi :
                ('c,
                 ('a, 'b) t_ ->
                 f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
              val filteri :
                ('a, 'b) t_ ->
                f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
              val partition_map :
                ('c,
                 ('d,
                  ('a, 'b) t_ ->
                  f:('-> [ `Fst of '| `Snd of 'd ]) ->
                  ('a, 'c) t_ * ('a, 'd) t_)
                 Core_kernel.Core_hashtbl_intf.no_map_options)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val partition_mapi :
                ('c,
                 ('d,
                  ('a, 'b) t_ ->
                  f:(key:'a key_ -> data:'-> [ `Fst of '| `Snd of 'd ]) ->
                  ('a, 'c) t_ * ('a, 'd) t_)
                 Core_kernel.Core_hashtbl_intf.no_map_options)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val partition_tf :
                ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
              val partitioni_tf :
                ('a, 'b) t_ ->
                f:(key:'a key_ -> data:'-> bool) ->
                ('a, 'b) t_ * ('a, 'b) t_
              val find_or_add :
                ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
              val find : ('a, 'b) t_ -> 'a key_ -> 'b option
              val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
              val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
              val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
              val merge :
                ('c,
                 ('k, 'a) t_ ->
                 ('k, 'b) t_ ->
                 f:(key:'k key_ ->
                    [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                    'c option) ->
                 ('k, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val merge_into :
                f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
              val keys : ('a, 'b) t_ -> 'a key_ list
              val data : ('a, 'b) t_ -> 'b list
              val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
              val filteri_inplace :
                ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
              val equal :
                ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
              val similar :
                ('a, 'b1) t_ -> ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
              val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
              val validate :
                name:('a key_ -> string) ->
                'Core_kernel.Validate.check ->
                ('a, 'b) t_ Core_kernel.Validate.check
              val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
              val t_of_sexp :
                (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
              val sexp_of_t :
                ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
              val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
              val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
              val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
              val __bin_read_t__ : ('a, int -> 'a t) Bin_prot.Read.reader1
              val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
              val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
              val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
            end
          module Pooled_hashtbl :
            sig
              type key = t
              type ('a, 'b) hashtbl = ('a, 'b) Core_kernel.Pooled_hashtbl.t
              type 'b t = (key, 'b) hashtbl
              type ('a, 'b) t_ = 'b t
              type 'a key_ = key
              val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
              val create :
                ('a key_, 'b, unit -> ('a, 'b) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist :
                ('a key_, 'b,
                 ('a key_ * 'b) list ->
                 [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_report_all_dups :
                ('a key_, 'b,
                 ('a key_ * 'b) list ->
                 [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_or_error :
                ('a key_, 'b,
                 ('a key_ * 'b) list -> ('a, 'b) t_ Core_kernel.Or_error.t)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_exn :
                ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val of_alist_multi :
                ('a key_, 'b list, ('a key_ * 'b) list -> ('a, 'b list) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val create_mapped :
                ('a key_, 'b,
                 get_key:('-> 'a key_) ->
                 get_data:('-> 'b) ->
                 'r list ->
                 [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val create_with_key :
                ('a key_, 'r,
                 get_key:('-> 'a key_) ->
                 'r list ->
                 [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val create_with_key_exn :
                ('a key_, 'r,
                 get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val group :
                ('a key_, 'b,
                 get_key:('-> 'a key_) ->
                 get_data:('-> 'b) ->
                 combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                Core_kernel.Core_hashtbl_intf.create_options_without_hashable
              val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
              val clear : ('a, 'b) t_ -> unit
              val copy : ('a, 'b) t_ -> ('a, 'b) t_
              val invariant : ('a, 'b) t_ -> unit
              val fold :
                ('a, 'b) t_ ->
                init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
              val iter :
                ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
              val existsi :
                ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
              val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
              val for_alli :
                ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
              val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
              val length : ('a, 'b) t_ -> int
              val is_empty : ('a, 'b) t_ -> bool
              val mem : ('a, 'b) t_ -> 'a key_ -> bool
              val remove : ('a, 'b) t_ -> 'a key_ -> unit
              val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
              val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
              val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
              val add :
                ('a, 'b) t_ -> key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
              val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
              val change :
                ('a, 'b) t_ -> 'a key_ -> ('b option -> 'b option) -> unit
              val add_multi :
                ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
              val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
              val map :
                ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val mapi :
                ('c,
                 ('a, 'b) t_ ->
                 f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val filter_map :
                ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val filter_mapi :
                ('c,
                 ('a, 'b) t_ ->
                 f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
              val filteri :
                ('a, 'b) t_ ->
                f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
              val partition_map :
                ('c,
                 ('d,
                  ('a, 'b) t_ ->
                  f:('-> [ `Fst of '| `Snd of 'd ]) ->
                  ('a, 'c) t_ * ('a, 'd) t_)
                 Core_kernel.Core_hashtbl_intf.no_map_options)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val partition_mapi :
                ('c,
                 ('d,
                  ('a, 'b) t_ ->
                  f:(key:'a key_ -> data:'-> [ `Fst of '| `Snd of 'd ]) ->
                  ('a, 'c) t_ * ('a, 'd) t_)
                 Core_kernel.Core_hashtbl_intf.no_map_options)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val partition_tf :
                ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
              val partitioni_tf :
                ('a, 'b) t_ ->
                f:(key:'a key_ -> data:'-> bool) ->
                ('a, 'b) t_ * ('a, 'b) t_
              val find_or_add :
                ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
              val find : ('a, 'b) t_ -> 'a key_ -> 'b option
              val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
              val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
              val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
              val merge :
                ('c,
                 ('k, 'a) t_ ->
                 ('k, 'b) t_ ->
                 f:(key:'k key_ ->
                    [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                    'c option) ->
                 ('k, 'c) t_)
                Core_kernel.Core_hashtbl_intf.no_map_options
              val merge_into :
                f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
              val keys : ('a, 'b) t_ -> 'a key_ list
              val data : ('a, 'b) t_ -> 'b list
              val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
              val filteri_inplace :
                ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
              val equal :
                ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
              val similar :
                ('a, 'b1) t_ -> ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
              val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
              val validate :
                name:('a key_ -> string) ->
                'Core_kernel.Validate.check ->
                ('a, 'b) t_ Core_kernel.Validate.check
              val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
              val t_of_sexp :
                (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
              val sexp_of_t :
                ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
              val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
              val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
              val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
              val __bin_read_t__ : ('a, int -> 'a t) Bin_prot.Read.reader1
              val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
              val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
              val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
            end
          module Hash_set :
            sig
              type elt = t
              type 'a hash_set = 'Core_kernel.Hash_set.t
              type t = elt hash_set
              type 'a t_ = t
              type 'a elt_ = elt
              val create :
                ('a, unit -> 'a t_)
                Core_kernel.Hash_set_intf.create_options_without_hashable
              val of_list :
                ('a, 'a elt_ list -> 'a t_)
                Core_kernel.Hash_set_intf.create_options_without_hashable
              val t_of_sexp : Sexplib.Sexp.t -> t
              val sexp_of_t : t -> Sexplib.Sexp.t
              val bin_size_t : t Bin_prot.Size.sizer
              val bin_write_t : t Bin_prot.Write.writer
              val bin_read_t : t Bin_prot.Read.reader
              val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
              val bin_writer_t : t Bin_prot.Type_class.writer
              val bin_reader_t : t Bin_prot.Type_class.reader
              val bin_t : t Bin_prot.Type_class.t
            end
          module Hash_queue :
            sig
              module Key :
                sig
                  type t = t
                  val hash : t -> int
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val compare : t -> t -> int
                end
              type 'a t
              val length : 'a t -> int
              val is_empty : 'a t -> bool
              val iter : 'a t -> f:('-> unit) -> unit
              val fold :
                'a t -> init:'accum -> f:('accum -> '-> 'accum) -> 'accum
              val exists : 'a t -> f:('-> bool) -> bool
              val for_all : 'a t -> f:('-> bool) -> bool
              val count : 'a t -> f:('-> bool) -> int
              val sum :
                (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                'a t -> f:('-> 'sum) -> 'sum
              val find : 'a t -> f:('-> bool) -> 'a option
              val find_map : 'a t -> f:('-> 'b option) -> 'b option
              val to_list : 'a t -> 'a list
              val to_array : 'a t -> 'a array
              val min_elt : 'a t -> cmp:('-> '-> int) -> 'a option
              val max_elt : 'a t -> cmp:('-> '-> int) -> 'a option
              val invariant : 'a t -> unit
              val create : unit -> 'a t
              val clear : 'a t -> unit
              val mem : 'a t -> Key.t -> bool
              val lookup : 'a t -> Key.t -> 'a option
              val lookup_exn : 'a t -> Key.t -> 'a
              val enqueue :
                'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
              val enqueue_exn : 'a t -> Key.t -> '-> unit
              val first : 'a t -> 'a option
              val keys : 'a t -> Key.t list
              val dequeue : 'a t -> 'a option
              val dequeue_exn : 'a t -> 'a
              val dequeue_with_key : 'a t -> (Key.t * 'a) option
              val dequeue_with_key_exn : 'a t -> Key.t * 'a
              val dequeue_all : 'a t -> f:('-> unit) -> unit
              val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
              val remove_exn : 'a t -> Key.t -> unit
              val replace : 'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
              val replace_exn : 'a t -> Key.t -> '-> unit
              val iteri : 'a t -> f:(key:Key.t -> data:'-> unit) -> unit
              val foldi :
                'a t -> init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
            end
          val pp : Format.formatter -> t -> unit
          val t_of_sexp : Sexplib.Sexp.t -> t
          val sexp_of_t : t -> Sexplib.Sexp.t
          val bin_t : t Bin_prot.Type_class.t
          val bin_read_t : t Bin_prot.Read.reader
          val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
          val bin_reader_t : t Bin_prot.Type_class.reader
          val bin_size_t : t Bin_prot.Size.sizer
          val bin_write_t : t Bin_prot.Write.writer
          val bin_writer_t : t Bin_prot.Type_class.writer
          val of_json : Ezjsonm.t -> t
          val to_json : t -> Ezjsonm.t
          val of_raw : string -> t
          val to_raw : t -> string
          val of_bytes : Core_kernel.Std.Bigstring.t -> t
          val of_bytes' : string -> t
          val master : t
        end
      module Graph :
        sig
          type t
          module V :
            sig
              type t = (Block.key, Tag.key) IrminGraph.vertex
              val compare : t -> t -> int
              val hash : t -> int
              val equal : t -> t -> bool
              type label
              val create : label -> t
              val label : t -> label
            end
          type vertex = V.t
          module E :
            sig
              type t
              val compare : t -> t -> int
              type vertex = vertex
              val src : t -> vertex
              val dst : t -> vertex
              type label
              val create : vertex -> label -> vertex -> t
              val label : t -> label
            end
          type edge = E.t
          val is_directed : bool
          val is_empty : t -> bool
          val nb_vertex : t -> int
          val nb_edges : t -> int
          val out_degree : t -> vertex -> int
          val in_degree : t -> vertex -> int
          val mem_vertex : t -> vertex -> bool
          val mem_edge : t -> vertex -> vertex -> bool
          val mem_edge_e : t -> edge -> bool
          val find_edge : t -> vertex -> vertex -> edge
          val find_all_edges : t -> vertex -> vertex -> edge list
          val succ : t -> vertex -> vertex list
          val pred : t -> vertex -> vertex list
          val succ_e : t -> vertex -> edge list
          val pred_e : t -> vertex -> edge list
          val iter_vertex : (vertex -> unit) -> t -> unit
          val fold_vertex : (vertex -> '-> 'a) -> t -> '-> 'a
          val iter_edges : (vertex -> vertex -> unit) -> t -> unit
          val fold_edges : (vertex -> vertex -> '-> 'a) -> t -> '-> 'a
          val iter_edges_e : (edge -> unit) -> t -> unit
          val fold_edges_e : (edge -> '-> 'a) -> t -> '-> 'a
          val map_vertex : (vertex -> vertex) -> t -> t
          val iter_succ : (vertex -> unit) -> t -> vertex -> unit
          val iter_pred : (vertex -> unit) -> t -> vertex -> unit
          val fold_succ : (vertex -> '-> 'a) -> t -> vertex -> '-> 'a
          val fold_pred : (vertex -> '-> 'a) -> t -> vertex -> '-> 'a
          val iter_succ_e : (edge -> unit) -> t -> vertex -> unit
          val fold_succ_e : (edge -> '-> 'a) -> t -> vertex -> '-> 'a
          val iter_pred_e : (edge -> unit) -> t -> vertex -> unit
          val fold_pred_e : (edge -> '-> 'a) -> t -> vertex -> '-> 'a
          val create : ?size:int -> unit -> t
          val clear : t -> unit
          val copy : t -> t
          val add_vertex : t -> vertex -> unit
          val remove_vertex : t -> vertex -> unit
          val add_edge : t -> vertex -> vertex -> unit
          val add_edge_e : t -> edge -> unit
          val remove_edge : t -> vertex -> vertex -> unit
          val remove_edge_e : t -> edge -> unit
          val transitive_closure : ?reflexive:bool -> t -> t
          val add_transitive_closure : ?reflexive:bool -> t -> t
          val transitive_reduction : ?reflexive:bool -> t -> t
          val replace_by_transitive_reduction : ?reflexive:bool -> t -> t
          val mirror : t -> t
          val complement : t -> t
          val intersect : t -> t -> t
          val union : t -> t -> t
          module Topological :
            sig val fold : (vertex -> '-> 'a) -> t -> '-> 'end
          val vertex : t -> vertex list
          val edges : t -> (vertex * vertex) list
          val closure :
            ?depth:int ->
            ?min:vertex list ->
            pred:(vertex -> vertex list Lwt.t) -> vertex list -> t Lwt.t
          val output :
            Format.formatter ->
            (vertex * Graph.Graphviz.DotAttributes.vertex list) list ->
            (vertex * Graph.Graphviz.DotAttributes.edge list * vertex) list ->
            string -> unit
          val min : t -> vertex list
          val max : t -> vertex list
          type dump = vertex list * (vertex * vertex) list
          val export : t -> dump
          val import : dump -> t
          module Dump :
            sig
              type t = dump
              val of_string : string -> t
              val to_string : t -> string
              val ( >= ) : t -> t -> bool
              val ( <= ) : t -> t -> bool
              val ( = ) : t -> t -> bool
              val ( > ) : t -> t -> bool
              val ( < ) : t -> t -> bool
              val ( <> ) : t -> t -> bool
              val equal : t -> t -> bool
              val compare : t -> t -> int
              val min : t -> t -> t
              val max : t -> t -> t
              val ascending : t -> t -> int
              val descending : t -> t -> int
              val between : t -> low:t -> high:t -> bool
              module Replace_polymorphic_compare :
                sig
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val _squelch_unused_module_warning_ : unit
                end
              type comparator_witness
              val validate_lbound :
                min:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val validate_ubound :
                max:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val validate_bound :
                min:t Core_kernel.Comparable_intf.bound ->
                max:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val comparator :
                (t, comparator_witness) Core_kernel.Comparator.comparator
              module Map :
                sig
                  module Key :
                    sig
                      type t = t
                      type comparator_witness = comparator_witness
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                    end
                  module Tree :
                    sig
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.Tree.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'a t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'a t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                    end
                  type 'a t =
                      (Key.t, 'a, Key.comparator_witness)
                      Core_kernel.Core_map.t
                  val empty : 'a t
                  val singleton : Key.t -> '-> 'a t
                  val of_alist :
                    (Key.t * 'a) list ->
                    [ `Duplicate_key of Key.t | `Ok of 'a t ]
                  val of_alist_or_error :
                    (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                  val of_alist_exn : (Key.t * 'a) list -> 'a t
                  val of_alist_multi : (Key.t * 'a) list -> 'a list t
                  val of_alist_fold :
                    (Key.t * 'a) list ->
                    init:'-> f:('-> '-> 'b) -> 'b t
                  val of_alist_reduce :
                    (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                  val of_sorted_array :
                    (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : (Key.t * 'a) array -> 'a t
                  val of_tree : 'Tree.t -> 'a t
                  val invariants : 'a t -> bool
                  val is_empty : 'a t -> bool
                  val length : 'a t -> int
                  val add : 'a t -> key:Key.t -> data:'-> 'a t
                  val add_multi :
                    'a list t -> key:Key.t -> data:'-> 'a list t
                  val change :
                    'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                  val find : 'a t -> Key.t -> 'a option
                  val find_exn : 'a t -> Key.t -> 'a
                  val remove : 'a t -> Key.t -> 'a t
                  val mem : 'a t -> Key.t -> bool
                  val iter : 'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                  val iter2 :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       data:[ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       unit) ->
                    unit
                  val map : 'a t -> f:('-> 'b) -> 'b t
                  val mapi : 'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                  val fold :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val fold_right :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val filter :
                    'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                  val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                  val filter_mapi :
                    'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                  val compare_direct :
                    ('-> '-> int) -> 'a t -> 'a t -> int
                  val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                  val keys : 'a t -> Key.t list
                  val data : 'a t -> 'a list
                  val to_alist : 'a t -> (Key.t * 'a) list
                  val validate :
                    name:(Key.t -> string) ->
                    'Core_kernel.Validate.check ->
                    'a t Core_kernel.Validate.check
                  val merge :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       'c option) ->
                    'c t
                  val symmetric_diff :
                    'a t ->
                    'a t ->
                    data_equal:('-> '-> bool) ->
                    (Key.t *
                     [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                    Core_kernel.Sequence.t
                  val min_elt : 'a t -> (Key.t * 'a) option
                  val min_elt_exn : 'a t -> Key.t * 'a
                  val max_elt : 'a t -> (Key.t * 'a) option
                  val max_elt_exn : 'a t -> Key.t * 'a
                  val for_all : 'a t -> f:('-> bool) -> bool
                  val exists : 'a t -> f:('-> bool) -> bool
                  val fold_range_inclusive :
                    'a t ->
                    min:Key.t ->
                    max:Key.t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val range_to_alist :
                    'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                  val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val rank : 'a t -> Key.t -> int option
                  val to_tree : 'a t -> 'Tree.t
                  val to_sequence :
                    ?keys_in:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Key.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Key.t ] ->
                    'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                  val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Set :
                sig
                  module Elt :
                    sig
                      type t = t
                      type comparator_witness = comparator_witness
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                    end
                  module Tree :
                    sig
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.Tree.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.Tree.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.Tree.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                    end
                  type t =
                      (Elt.t, Elt.comparator_witness) Core_kernel.Core_set.t
                  val length : t -> int
                  val is_empty : t -> bool
                  val iter : t -> f:(Elt.t -> unit) -> unit
                  val fold :
                    t ->
                    init:'accum -> f:('accum -> Elt.t -> 'accum) -> 'accum
                  val exists : t -> f:(Elt.t -> bool) -> bool
                  val for_all : t -> f:(Elt.t -> bool) -> bool
                  val count : t -> f:(Elt.t -> bool) -> int
                  val sum :
                    (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                    t -> f:(Elt.t -> 'sum) -> 'sum
                  val find : t -> f:(Elt.t -> bool) -> Elt.t option
                  val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                  val to_list : t -> Elt.t list
                  val to_array : t -> Elt.t array
                  val invariants : t -> bool
                  val mem : t -> Elt.t -> bool
                  val add : t -> Elt.t -> t
                  val remove : t -> Elt.t -> t
                  val union : t -> t -> t
                  val inter : t -> t -> t
                  val diff : t -> t -> t
                  val compare_direct : t -> t -> int
                  val equal : t -> t -> bool
                  val subset : t -> t -> bool
                  val fold_until :
                    t ->
                    init:'->
                    f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                    'b
                  val fold_right :
                    t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                  val iter2 :
                    t ->
                    t ->
                    f:([ `Both of Elt.t * Elt.t
                       | `Left of Elt.t
                       | `Right of Elt.t ] -> unit) ->
                    unit
                  val filter : t -> f:(Elt.t -> bool) -> t
                  val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                  val elements : t -> Elt.t list
                  val min_elt : t -> Elt.t option
                  val min_elt_exn : t -> Elt.t
                  val max_elt : t -> Elt.t option
                  val max_elt_exn : t -> Elt.t
                  val choose : t -> Elt.t option
                  val choose_exn : t -> Elt.t
                  val split : t -> Elt.t -> t * bool * t
                  val group_by :
                    t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                  val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                  val find_index : t -> int -> Elt.t option
                  val remove_index : t -> int -> t
                  val to_tree : t -> Tree.t
                  val to_sequence :
                    ?in_:[ `Decreasing_order
                         | `Decreasing_order_less_than_or_equal_to of Elt.t
                         | `Increasing_order
                         | `Increasing_order_greater_than_or_equal_to of
                             Elt.t ] ->
                    t -> Elt.t Core_kernel.Sequence.t
                  val to_map :
                    t ->
                    f:(Elt.t -> 'data) ->
                    (Elt.t, 'data, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t
                  val empty : t
                  val singleton : Elt.t -> t
                  val union_list : t list -> t
                  val of_list : Elt.t list -> t
                  val of_array : Elt.t array -> t
                  val of_sorted_array :
                    Elt.t array -> t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : Elt.t array -> t
                  val stable_dedup_list : Elt.t list -> Elt.t list
                  val map :
                    ('a, 'b) Core_kernel.Core_set.t -> f:('-> Elt.t) -> t
                  val filter_map :
                    ('a, 'b) Core_kernel.Core_set.t ->
                    f:('-> Elt.t option) -> t
                  val of_tree : Tree.t -> t
                  val of_map_keys :
                    (Elt.t, 'a, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t -> t
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val compare : t -> t -> int
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_t : t Bin_prot.Type_class.t
                end
              module Hashable : sig type t = t end
              val hash : t -> int
              val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
              module Table :
                sig
                  type key = t
                  type ('a, 'b) hashtbl =
                      ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                  type 'b t = (key, 'b) hashtbl
                  type ('a, 'b) t_ = 'b t
                  type 'a key_ = key
                  val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
                  val create :
                    ('a key_, 'b, unit -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_report_all_dups :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_or_error :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     ('a, 'b) t_ Core_kernel.Or_error.t)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_exn :
                    ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_multi :
                    ('a key_, 'b list,
                     ('a key_ * 'b) list -> ('a, 'b list) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_mapped :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key_exn :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val group :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                  val clear : ('a, 'b) t_ -> unit
                  val copy : ('a, 'b) t_ -> ('a, 'b) t_
                  val invariant : ('a, 'b) t_ -> unit
                  val fold :
                    ('a, 'b) t_ ->
                    init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                  val iter :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
                  val existsi :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val for_alli :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val length : ('a, 'b) t_ -> int
                  val is_empty : ('a, 'b) t_ -> bool
                  val mem : ('a, 'b) t_ -> 'a key_ -> bool
                  val remove : ('a, 'b) t_ -> 'a key_ -> unit
                  val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                  val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val add :
                    ('a, 'b) t_ ->
                    key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                  val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val change :
                    ('a, 'b) t_ ->
                    'a key_ -> ('b option -> 'b option) -> unit
                  val add_multi :
                    ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                  val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                  val map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                  val filteri :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                  val partition_map :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:('-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_mapi :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:(key:'a key_ ->
                         data:'-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_tf :
                    ('a, 'b) t_ ->
                    f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                  val partitioni_tf :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) ->
                    ('a, 'b) t_ * ('a, 'b) t_
                  val find_or_add :
                    ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                  val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                  val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                  val merge :
                    ('c,
                     ('k, 'a) t_ ->
                     ('k, 'b) t_ ->
                     f:(key:'k key_ ->
                        [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                        'c option) ->
                     ('k, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val merge_into :
                    f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                    src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                  val keys : ('a, 'b) t_ -> 'a key_ list
                  val data : ('a, 'b) t_ -> 'b list
                  val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
                  val filteri_inplace :
                    ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                  val equal :
                    ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
                  val similar :
                    ('a, 'b1) t_ ->
                    ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                  val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                  val validate :
                    name:('a key_ -> string) ->
                    'Core_kernel.Validate.check ->
                    ('a, 'b) t_ Core_kernel.Validate.check
                  val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Pooled_hashtbl :
                sig
                  type key = t
                  type ('a, 'b) hashtbl =
                      ('a, 'b) Core_kernel.Pooled_hashtbl.t
                  type 'b t = (key, 'b) hashtbl
                  type ('a, 'b) t_ = 'b t
                  type 'a key_ = key
                  val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
                  val create :
                    ('a key_, 'b, unit -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_report_all_dups :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_or_error :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     ('a, 'b) t_ Core_kernel.Or_error.t)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_exn :
                    ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_multi :
                    ('a key_, 'b list,
                     ('a key_ * 'b) list -> ('a, 'b list) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_mapped :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key_exn :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val group :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                  val clear : ('a, 'b) t_ -> unit
                  val copy : ('a, 'b) t_ -> ('a, 'b) t_
                  val invariant : ('a, 'b) t_ -> unit
                  val fold :
                    ('a, 'b) t_ ->
                    init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                  val iter :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
                  val existsi :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val for_alli :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val length : ('a, 'b) t_ -> int
                  val is_empty : ('a, 'b) t_ -> bool
                  val mem : ('a, 'b) t_ -> 'a key_ -> bool
                  val remove : ('a, 'b) t_ -> 'a key_ -> unit
                  val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                  val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val add :
                    ('a, 'b) t_ ->
                    key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                  val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val change :
                    ('a, 'b) t_ ->
                    'a key_ -> ('b option -> 'b option) -> unit
                  val add_multi :
                    ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                  val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                  val map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                  val filteri :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                  val partition_map :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:('-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_mapi :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:(key:'a key_ ->
                         data:'-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_tf :
                    ('a, 'b) t_ ->
                    f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                  val partitioni_tf :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) ->
                    ('a, 'b) t_ * ('a, 'b) t_
                  val find_or_add :
                    ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                  val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                  val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                  val merge :
                    ('c,
                     ('k, 'a) t_ ->
                     ('k, 'b) t_ ->
                     f:(key:'k key_ ->
                        [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                        'c option) ->
                     ('k, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val merge_into :
                    f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                    src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                  val keys : ('a, 'b) t_ -> 'a key_ list
                  val data : ('a, 'b) t_ -> 'b list
                  val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
                  val filteri_inplace :
                    ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                  val equal :
                    ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
                  val similar :
                    ('a, 'b1) t_ ->
                    ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                  val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                  val validate :
                    name:('a key_ -> string) ->
                    'Core_kernel.Validate.check ->
                    ('a, 'b) t_ Core_kernel.Validate.check
                  val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Hash_set :
                sig
                  type elt = t
                  type 'a hash_set = 'Core_kernel.Hash_set.t
                  type t = elt hash_set
                  type 'a t_ = t
                  type 'a elt_ = elt
                  val create :
                    ('a, unit -> 'a t_)
                    Core_kernel.Hash_set_intf.create_options_without_hashable
                  val of_list :
                    ('a, 'a elt_ list -> 'a t_)
                    Core_kernel.Hash_set_intf.create_options_without_hashable
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_t : t Bin_prot.Type_class.t
                end
              module Hash_queue :
                sig
                  module Key :
                    sig
                      type t = t
                      val hash : t -> int
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                    end
                  type 'a t
                  val length : 'a t -> int
                  val is_empty : 'a t -> bool
                  val iter : 'a t -> f:('-> unit) -> unit
                  val fold :
                    'a t ->
                    init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                  val exists : 'a t -> f:('-> bool) -> bool
                  val for_all : 'a t -> f:('-> bool) -> bool
                  val count : 'a t -> f:('-> bool) -> int
                  val sum :
                    (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                    'a t -> f:('-> 'sum) -> 'sum
                  val find : 'a t -> f:('-> bool) -> 'a option
                  val find_map : 'a t -> f:('-> 'b option) -> 'b option
                  val to_list : 'a t -> 'a list
                  val to_array : 'a t -> 'a array
                  val min_elt : 'a t -> cmp:('-> '-> int) -> 'a option
                  val max_elt : 'a t -> cmp:('-> '-> int) -> 'a option
                  val invariant : 'a t -> unit
                  val create : unit -> 'a t
                  val clear : 'a t -> unit
                  val mem : 'a t -> Key.t -> bool
                  val lookup : 'a t -> Key.t -> 'a option
                  val lookup_exn : 'a t -> Key.t -> 'a
                  val enqueue :
                    'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                  val enqueue_exn : 'a t -> Key.t -> '-> unit
                  val first : 'a t -> 'a option
                  val keys : 'a t -> Key.t list
                  val dequeue : 'a t -> 'a option
                  val dequeue_exn : 'a t -> 'a
                  val dequeue_with_key : 'a t -> (Key.t * 'a) option
                  val dequeue_with_key_exn : 'a t -> Key.t * 'a
                  val dequeue_all : 'a t -> f:('-> unit) -> unit
                  val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                  val remove_exn : 'a t -> Key.t -> unit
                  val replace : 'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                  val replace_exn : 'a t -> Key.t -> '-> unit
                  val iteri :
                    'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                  val foldi :
                    'a t ->
                    init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                end
              val pp : Format.formatter -> t -> unit
              val t_of_sexp : Sexplib.Sexp.t -> t
              val sexp_of_t : t -> Sexplib.Sexp.t
              val bin_t : t Bin_prot.Type_class.t
              val bin_read_t : t Bin_prot.Read.reader
              val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
              val bin_reader_t : t Bin_prot.Type_class.reader
              val bin_size_t : t Bin_prot.Size.sizer
              val bin_write_t : t Bin_prot.Write.writer
              val bin_writer_t : t Bin_prot.Type_class.writer
              val of_json : Ezjsonm.t -> t
              val to_json : t -> Ezjsonm.t
            end
        end
    end
  type ('key, 'contents, 'tag) t =
      (module IrminBranch.STORE with type branch = 'tag and type value = 'contents and type Block.key = 'key)
  module Make :
    functor (Block : IrminBlock.STORE->
      functor
        (Tag : sig
                 type t
                 type key
                 type value = Block.key
                 val create : unit -> t Lwt.t
                 val read : t -> key -> value option Lwt.t
                 val read_exn : t -> key -> value Lwt.t
                 val mem : t -> key -> bool Lwt.t
                 val list : t -> key list -> key list Lwt.t
                 val dump : t -> (key * value) list Lwt.t
                 val update : t -> key -> value -> unit Lwt.t
                 val remove : t -> key -> unit Lwt.t
                 val watch : t -> key -> value Lwt_stream.t
                 module Key :
                   sig
                     type t = key
                     val of_string : string -> t
                     val to_string : t -> string
                     val ( >= ) : t -> t -> bool
                     val ( <= ) : t -> t -> bool
                     val ( = ) : t -> t -> bool
                     val ( > ) : t -> t -> bool
                     val ( < ) : t -> t -> bool
                     val ( <> ) : t -> t -> bool
                     val equal : t -> t -> bool
                     val compare : t -> t -> int
                     val min : t -> t -> t
                     val max : t -> t -> t
                     val ascending : t -> t -> int
                     val descending : t -> t -> int
                     val between : t -> low:t -> high:t -> bool
                     module Replace_polymorphic_compare :
                       sig
                         val ( >= ) : t -> t -> bool
                         val ( <= ) : t -> t -> bool
                         val ( = ) : t -> t -> bool
                         val ( > ) : t -> t -> bool
                         val ( < ) : t -> t -> bool
                         val ( <> ) : t -> t -> bool
                         val equal : t -> t -> bool
                         val compare : t -> t -> int
                         val min : t -> t -> t
                         val max : t -> t -> t
                         val _squelch_unused_module_warning_ : unit
                       end
                     type comparator_witness
                     val validate_lbound :
                       min:t Core_kernel.Comparable_intf.bound ->
                       t Core_kernel.Validate.check
                     val validate_ubound :
                       max:t Core_kernel.Comparable_intf.bound ->
                       t Core_kernel.Validate.check
                     val validate_bound :
                       min:t Core_kernel.Comparable_intf.bound ->
                       max:t Core_kernel.Comparable_intf.bound ->
                       t Core_kernel.Validate.check
                     val comparator :
                       (t, comparator_witness)
                       Core_kernel.Comparator.comparator
                     module Map :
                       sig
                         module Key :
                           sig
                             type t = t
                             type comparator_witness = comparator_witness
                             val comparator :
                               (t, comparator_witness)
                               Core_kernel.Comparator.comparator
                           end
                         module Tree :
                           sig
                             type 'a t =
                                 (Key.t, 'a, Key.comparator_witness)
                                 Core_kernel.Core_map.Tree.t
                             val empty : 'a t
                             val singleton : Key.t -> '-> 'a t
                             val of_alist :
                               (Key.t * 'a) list ->
                               [ `Duplicate_key of Key.t | `Ok of 'a t ]
                             val of_alist_or_error :
                               (Key.t * 'a) list ->
                               'a t Core_kernel.Or_error.t
                             val of_alist_exn : (Key.t * 'a) list -> 'a t
                             val of_alist_multi :
                               (Key.t * 'a) list -> 'a list t
                             val of_alist_fold :
                               (Key.t * 'a) list ->
                               init:'-> f:('-> '-> 'b) -> 'b t
                             val of_alist_reduce :
                               (Key.t * 'a) list ->
                               f:('-> '-> 'a) -> 'a t
                             val of_sorted_array :
                               (Key.t * 'a) array ->
                               'a t Core_kernel.Or_error.t
                             val of_sorted_array_unchecked :
                               (Key.t * 'a) array -> 'a t
                             val of_tree : 'a t -> 'a t
                             val invariants : 'a t -> bool
                             val is_empty : 'a t -> bool
                             val length : 'a t -> int
                             val add : 'a t -> key:Key.t -> data:'-> 'a t
                             val add_multi :
                               'a list t -> key:Key.t -> data:'-> 'a list t
                             val change :
                               'a t ->
                               Key.t -> ('a option -> 'a option) -> 'a t
                             val find : 'a t -> Key.t -> 'a option
                             val find_exn : 'a t -> Key.t -> 'a
                             val remove : 'a t -> Key.t -> 'a t
                             val mem : 'a t -> Key.t -> bool
                             val iter :
                               'a t ->
                               f:(key:Key.t -> data:'-> unit) -> unit
                             val iter2 :
                               'a t ->
                               'b t ->
                               f:(key:Key.t ->
                                  data:[ `Both of 'a * 'b
                                       | `Left of 'a
                                       | `Right of 'b ] ->
                                  unit) ->
                               unit
                             val map : 'a t -> f:('-> 'b) -> 'b t
                             val mapi :
                               'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                             val fold :
                               'a t ->
                               init:'->
                               f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                             val fold_right :
                               'a t ->
                               init:'->
                               f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                             val filter :
                               'a t ->
                               f:(key:Key.t -> data:'-> bool) -> 'a t
                             val filter_map :
                               'a t -> f:('-> 'b option) -> 'b t
                             val filter_mapi :
                               'a t ->
                               f:(key:Key.t -> data:'-> 'b option) -> 'b t
                             val compare_direct :
                               ('-> '-> int) -> 'a t -> 'a t -> int
                             val equal :
                               ('-> '-> bool) -> 'a t -> 'a t -> bool
                             val keys : 'a t -> Key.t list
                             val data : 'a t -> 'a list
                             val to_alist : 'a t -> (Key.t * 'a) list
                             val validate :
                               name:(Key.t -> string) ->
                               'Core_kernel.Validate.check ->
                               'a t Core_kernel.Validate.check
                             val merge :
                               'a t ->
                               'b t ->
                               f:(key:Key.t ->
                                  [ `Both of 'a * 'b
                                  | `Left of 'a
                                  | `Right of 'b ] -> 'c option) ->
                               'c t
                             val symmetric_diff :
                               'a t ->
                               'a t ->
                               data_equal:('-> '-> bool) ->
                               (Key.t *
                                [ `Left of 'a
                                | `Right of 'a
                                | `Unequal of 'a * 'a ])
                               Core_kernel.Sequence.t
                             val min_elt : 'a t -> (Key.t * 'a) option
                             val min_elt_exn : 'a t -> Key.t * 'a
                             val max_elt : 'a t -> (Key.t * 'a) option
                             val max_elt_exn : 'a t -> Key.t * 'a
                             val for_all : 'a t -> f:('-> bool) -> bool
                             val exists : 'a t -> f:('-> bool) -> bool
                             val fold_range_inclusive :
                               'a t ->
                               min:Key.t ->
                               max:Key.t ->
                               init:'->
                               f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                             val range_to_alist :
                               'a t ->
                               min:Key.t -> max:Key.t -> (Key.t * 'a) list
                             val prev_key :
                               'a t -> Key.t -> (Key.t * 'a) option
                             val next_key :
                               'a t -> Key.t -> (Key.t * 'a) option
                             val rank : 'a t -> Key.t -> int option
                             val to_tree : 'a t -> 'a t
                             val to_sequence :
                               ?keys_in:[ `Decreasing_order
                                        | `Decreasing_order_less_than_or_equal_to of
                                            Key.t
                                        | `Increasing_order
                                        | `Increasing_order_greater_than_or_equal_to of
                                            Key.t ] ->
                               'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                             val t_of_sexp :
                               (Sexplib.Sexp.t -> 'a) ->
                               Sexplib.Sexp.t -> 'a t
                             val sexp_of_t :
                               ('-> Sexplib.Sexp.t) ->
                               'a t -> Sexplib.Sexp.t
                           end
                         type 'a t =
                             (Key.t, 'a, Key.comparator_witness)
                             Core_kernel.Core_map.t
                         val empty : 'a t
                         val singleton : Key.t -> '-> 'a t
                         val of_alist :
                           (Key.t * 'a) list ->
                           [ `Duplicate_key of Key.t | `Ok of 'a t ]
                         val of_alist_or_error :
                           (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                         val of_alist_exn : (Key.t * 'a) list -> 'a t
                         val of_alist_multi : (Key.t * 'a) list -> 'a list t
                         val of_alist_fold :
                           (Key.t * 'a) list ->
                           init:'-> f:('-> '-> 'b) -> 'b t
                         val of_alist_reduce :
                           (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                         val of_sorted_array :
                           (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                         val of_sorted_array_unchecked :
                           (Key.t * 'a) array -> 'a t
                         val of_tree : 'Tree.t -> 'a t
                         val invariants : 'a t -> bool
                         val is_empty : 'a t -> bool
                         val length : 'a t -> int
                         val add : 'a t -> key:Key.t -> data:'-> 'a t
                         val add_multi :
                           'a list t -> key:Key.t -> data:'-> 'a list t
                         val change :
                           'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                         val find : 'a t -> Key.t -> 'a option
                         val find_exn : 'a t -> Key.t -> 'a
                         val remove : 'a t -> Key.t -> 'a t
                         val mem : 'a t -> Key.t -> bool
                         val iter :
                           'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                         val iter2 :
                           'a t ->
                           'b t ->
                           f:(key:Key.t ->
                              data:[ `Both of 'a * 'b
                                   | `Left of 'a
                                   | `Right of 'b ] ->
                              unit) ->
                           unit
                         val map : 'a t -> f:('-> 'b) -> 'b t
                         val mapi :
                           'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                         val fold :
                           'a t ->
                           init:'->
                           f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                         val fold_right :
                           'a t ->
                           init:'->
                           f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                         val filter :
                           'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                         val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                         val filter_mapi :
                           'a t ->
                           f:(key:Key.t -> data:'-> 'b option) -> 'b t
                         val compare_direct :
                           ('-> '-> int) -> 'a t -> 'a t -> int
                         val equal :
                           ('-> '-> bool) -> 'a t -> 'a t -> bool
                         val keys : 'a t -> Key.t list
                         val data : 'a t -> 'a list
                         val to_alist : 'a t -> (Key.t * 'a) list
                         val validate :
                           name:(Key.t -> string) ->
                           'Core_kernel.Validate.check ->
                           'a t Core_kernel.Validate.check
                         val merge :
                           'a t ->
                           'b t ->
                           f:(key:Key.t ->
                              [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                              'c option) ->
                           'c t
                         val symmetric_diff :
                           'a t ->
                           'a t ->
                           data_equal:('-> '-> bool) ->
                           (Key.t *
                            [ `Left of 'a
                            | `Right of 'a
                            | `Unequal of 'a * 'a ])
                           Core_kernel.Sequence.t
                         val min_elt : 'a t -> (Key.t * 'a) option
                         val min_elt_exn : 'a t -> Key.t * 'a
                         val max_elt : 'a t -> (Key.t * 'a) option
                         val max_elt_exn : 'a t -> Key.t * 'a
                         val for_all : 'a t -> f:('-> bool) -> bool
                         val exists : 'a t -> f:('-> bool) -> bool
                         val fold_range_inclusive :
                           'a t ->
                           min:Key.t ->
                           max:Key.t ->
                           init:'->
                           f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                         val range_to_alist :
                           'a t ->
                           min:Key.t -> max:Key.t -> (Key.t * 'a) list
                         val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                         val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                         val rank : 'a t -> Key.t -> int option
                         val to_tree : 'a t -> 'Tree.t
                         val to_sequence :
                           ?keys_in:[ `Decreasing_order
                                    | `Decreasing_order_less_than_or_equal_to of
                                        Key.t
                                    | `Increasing_order
                                    | `Increasing_order_greater_than_or_equal_to of
                                        Key.t ] ->
                           'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                         val t_of_sexp :
                           (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                         val sexp_of_t :
                           ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                         val compare :
                           ('-> '-> int) -> 'a t -> 'a t -> int
                         val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                         val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                         val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                         val __bin_read_t__ :
                           ('a, int -> 'a t) Bin_prot.Read.reader1
                         val bin_writer_t :
                           ('a, 'a t) Bin_prot.Type_class.S1.writer
                         val bin_reader_t :
                           ('a, 'a t) Bin_prot.Type_class.S1.reader
                         val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                       end
                     module Set :
                       sig
                         module Elt :
                           sig
                             type t = t
                             type comparator_witness = comparator_witness
                             val comparator :
                               (t, comparator_witness)
                               Core_kernel.Comparator.comparator
                             val t_of_sexp : Sexplib.Sexp.t -> t
                             val sexp_of_t : t -> Sexplib.Sexp.t
                           end
                         module Tree :
                           sig
                             type t =
                                 (Elt.t, Elt.comparator_witness)
                                 Core_kernel.Core_set.Tree.t
                             val length : t -> int
                             val is_empty : t -> bool
                             val iter : t -> f:(Elt.t -> unit) -> unit
                             val fold :
                               t ->
                               init:'accum ->
                               f:('accum -> Elt.t -> 'accum) -> 'accum
                             val exists : t -> f:(Elt.t -> bool) -> bool
                             val for_all : t -> f:(Elt.t -> bool) -> bool
                             val count : t -> f:(Elt.t -> bool) -> int
                             val sum :
                               (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                               t -> f:(Elt.t -> 'sum) -> 'sum
                             val find :
                               t -> f:(Elt.t -> bool) -> Elt.t option
                             val find_map :
                               t -> f:(Elt.t -> 'a option) -> 'a option
                             val to_list : t -> Elt.t list
                             val to_array : t -> Elt.t array
                             val invariants : t -> bool
                             val mem : t -> Elt.t -> bool
                             val add : t -> Elt.t -> t
                             val remove : t -> Elt.t -> t
                             val union : t -> t -> t
                             val inter : t -> t -> t
                             val diff : t -> t -> t
                             val compare_direct : t -> t -> int
                             val equal : t -> t -> bool
                             val subset : t -> t -> bool
                             val fold_until :
                               t ->
                               init:'->
                               f:('->
                                  Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                               'b
                             val fold_right :
                               t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                             val iter2 :
                               t ->
                               t ->
                               f:([ `Both of Elt.t * Elt.t
                                  | `Left of Elt.t
                                  | `Right of Elt.t ] -> unit) ->
                               unit
                             val filter : t -> f:(Elt.t -> bool) -> t
                             val partition_tf :
                               t -> f:(Elt.t -> bool) -> t * t
                             val elements : t -> Elt.t list
                             val min_elt : t -> Elt.t option
                             val min_elt_exn : t -> Elt.t
                             val max_elt : t -> Elt.t option
                             val max_elt_exn : t -> Elt.t
                             val choose : t -> Elt.t option
                             val choose_exn : t -> Elt.t
                             val split : t -> Elt.t -> t * bool * t
                             val group_by :
                               t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                             val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                             val find_index : t -> int -> Elt.t option
                             val remove_index : t -> int -> t
                             val to_tree : t -> t
                             val to_sequence :
                               ?in_:[ `Decreasing_order
                                    | `Decreasing_order_less_than_or_equal_to of
                                        Elt.t
                                    | `Increasing_order
                                    | `Increasing_order_greater_than_or_equal_to of
                                        Elt.t ] ->
                               t -> Elt.t Core_kernel.Sequence.t
                             val to_map :
                               t ->
                               f:(Elt.t -> 'data) ->
                               (Elt.t, 'data, Elt.comparator_witness)
                               Core_kernel.Core_set_intf.Map.t
                             val empty : t
                             val singleton : Elt.t -> t
                             val union_list : t list -> t
                             val of_list : Elt.t list -> t
                             val of_array : Elt.t array -> t
                             val of_sorted_array :
                               Elt.t array -> t Core_kernel.Or_error.t
                             val of_sorted_array_unchecked : Elt.t array -> t
                             val stable_dedup_list : Elt.t list -> Elt.t list
                             val map :
                               ('a, 'b) Core_kernel.Core_set.Tree.t ->
                               f:('-> Elt.t) -> t
                             val filter_map :
                               ('a, 'b) Core_kernel.Core_set.Tree.t ->
                               f:('-> Elt.t option) -> t
                             val of_tree : t -> t
                             val of_map_keys :
                               (Elt.t, 'a, Elt.comparator_witness)
                               Core_kernel.Core_set_intf.Map.t -> t
                             val t_of_sexp : Sexplib.Sexp.t -> t
                             val sexp_of_t : t -> Sexplib.Sexp.t
                             val compare : t -> t -> int
                           end
                         type t =
                             (Elt.t, Elt.comparator_witness)
                             Core_kernel.Core_set.t
                         val length : t -> int
                         val is_empty : t -> bool
                         val iter : t -> f:(Elt.t -> unit) -> unit
                         val fold :
                           t ->
                           init:'accum ->
                           f:('accum -> Elt.t -> 'accum) -> 'accum
                         val exists : t -> f:(Elt.t -> bool) -> bool
                         val for_all : t -> f:(Elt.t -> bool) -> bool
                         val count : t -> f:(Elt.t -> bool) -> int
                         val sum :
                           (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                           t -> f:(Elt.t -> 'sum) -> 'sum
                         val find : t -> f:(Elt.t -> bool) -> Elt.t option
                         val find_map :
                           t -> f:(Elt.t -> 'a option) -> 'a option
                         val to_list : t -> Elt.t list
                         val to_array : t -> Elt.t array
                         val invariants : t -> bool
                         val mem : t -> Elt.t -> bool
                         val add : t -> Elt.t -> t
                         val remove : t -> Elt.t -> t
                         val union : t -> t -> t
                         val inter : t -> t -> t
                         val diff : t -> t -> t
                         val compare_direct : t -> t -> int
                         val equal : t -> t -> bool
                         val subset : t -> t -> bool
                         val fold_until :
                           t ->
                           init:'->
                           f:('->
                              Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                           'b
                         val fold_right :
                           t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                         val iter2 :
                           t ->
                           t ->
                           f:([ `Both of Elt.t * Elt.t
                              | `Left of Elt.t
                              | `Right of Elt.t ] -> unit) ->
                           unit
                         val filter : t -> f:(Elt.t -> bool) -> t
                         val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                         val elements : t -> Elt.t list
                         val min_elt : t -> Elt.t option
                         val min_elt_exn : t -> Elt.t
                         val max_elt : t -> Elt.t option
                         val max_elt_exn : t -> Elt.t
                         val choose : t -> Elt.t option
                         val choose_exn : t -> Elt.t
                         val split : t -> Elt.t -> t * bool * t
                         val group_by :
                           t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                         val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                         val find_index : t -> int -> Elt.t option
                         val remove_index : t -> int -> t
                         val to_tree : t -> Tree.t
                         val to_sequence :
                           ?in_:[ `Decreasing_order
                                | `Decreasing_order_less_than_or_equal_to of
                                    Elt.t
                                | `Increasing_order
                                | `Increasing_order_greater_than_or_equal_to of
                                    Elt.t ] ->
                           t -> Elt.t Core_kernel.Sequence.t
                         val to_map :
                           t ->
                           f:(Elt.t -> 'data) ->
                           (Elt.t, 'data, Elt.comparator_witness)
                           Core_kernel.Core_set_intf.Map.t
                         val empty : t
                         val singleton : Elt.t -> t
                         val union_list : t list -> t
                         val of_list : Elt.t list -> t
                         val of_array : Elt.t array -> t
                         val of_sorted_array :
                           Elt.t array -> t Core_kernel.Or_error.t
                         val of_sorted_array_unchecked : Elt.t array -> t
                         val stable_dedup_list : Elt.t list -> Elt.t list
                         val map :
                           ('a, 'b) Core_kernel.Core_set.t ->
                           f:('-> Elt.t) -> t
                         val filter_map :
                           ('a, 'b) Core_kernel.Core_set.t ->
                           f:('-> Elt.t option) -> t
                         val of_tree : Tree.t -> t
                         val of_map_keys :
                           (Elt.t, 'a, Elt.comparator_witness)
                           Core_kernel.Core_set_intf.Map.t -> t
                         val t_of_sexp : Sexplib.Sexp.t -> t
                         val sexp_of_t : t -> Sexplib.Sexp.t
                         val compare : t -> t -> int
                         val bin_size_t : t Bin_prot.Size.sizer
                         val bin_write_t : t Bin_prot.Write.writer
                         val bin_read_t : t Bin_prot.Read.reader
                         val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                         val bin_writer_t : t Bin_prot.Type_class.writer
                         val bin_reader_t : t Bin_prot.Type_class.reader
                         val bin_t : t Bin_prot.Type_class.t
                       end
                     module Hashable : sig type t = t end
                     val hash : t -> int
                     val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
                     module Table :
                       sig
                         type key = t
                         type ('a, 'b) hashtbl =
                             ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                         type 'b t = (key, 'b) hashtbl
                         type ('a, 'b) t_ = 'b t
                         type 'a key_ = key
                         val hashable :
                           key Core_kernel.Core_hashtbl_intf.Hashable.t
                         val create :
                           ('a key_, 'b, unit -> ('a, 'b) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist :
                           ('a key_, 'b,
                            ('a key_ * 'b) list ->
                            [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist_report_all_dups :
                           ('a key_, 'b,
                            ('a key_ * 'b) list ->
                            [ `Duplicate_keys of 'a key_ list
                            | `Ok of ('a, 'b) t_ ])
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist_or_error :
                           ('a key_, 'b,
                            ('a key_ * 'b) list ->
                            ('a, 'b) t_ Core_kernel.Or_error.t)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist_exn :
                           ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist_multi :
                           ('a key_, 'b list,
                            ('a key_ * 'b) list -> ('a, 'b list) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val create_mapped :
                           ('a key_, 'b,
                            get_key:('-> 'a key_) ->
                            get_data:('-> 'b) ->
                            'r list ->
                            [ `Duplicate_keys of 'a key_ list
                            | `Ok of ('a, 'b) t_ ])
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val create_with_key :
                           ('a key_, 'r,
                            get_key:('-> 'a key_) ->
                            'r list ->
                            [ `Duplicate_keys of 'a key_ list
                            | `Ok of ('a, 'r) t_ ])
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val create_with_key_exn :
                           ('a key_, 'r,
                            get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val group :
                           ('a key_, 'b,
                            get_key:('-> 'a key_) ->
                            get_data:('-> 'b) ->
                            combine:('-> '-> 'b) ->
                            'r list -> ('a, 'b) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val sexp_of_key :
                           ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                         val clear : ('a, 'b) t_ -> unit
                         val copy : ('a, 'b) t_ -> ('a, 'b) t_
                         val invariant : ('a, 'b) t_ -> unit
                         val fold :
                           ('a, 'b) t_ ->
                           init:'->
                           f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                         val iter :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> unit) -> unit
                         val existsi :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> bool) -> bool
                         val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                         val for_alli :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> bool) -> bool
                         val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                         val length : ('a, 'b) t_ -> int
                         val is_empty : ('a, 'b) t_ -> bool
                         val mem : ('a, 'b) t_ -> 'a key_ -> bool
                         val remove : ('a, 'b) t_ -> 'a key_ -> unit
                         val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                         val replace :
                           ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                         val set :
                           ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                         val add :
                           ('a, 'b) t_ ->
                           key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                         val add_exn :
                           ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                         val change :
                           ('a, 'b) t_ ->
                           'a key_ -> ('b option -> 'b option) -> unit
                         val add_multi :
                           ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                         val remove_multi :
                           ('a, 'b list) t_ -> 'a key_ -> unit
                         val map :
                           ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val mapi :
                           ('c,
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val filter_map :
                           ('c,
                            ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val filter_mapi :
                           ('c,
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> 'c option) ->
                            ('a, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val filter :
                           ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                         val filteri :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                         val partition_map :
                           ('c,
                            ('d,
                             ('a, 'b) t_ ->
                             f:('-> [ `Fst of '| `Snd of 'd ]) ->
                             ('a, 'c) t_ * ('a, 'd) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val partition_mapi :
                           ('c,
                            ('d,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ ->
                                data:'-> [ `Fst of '| `Snd of 'd ]) ->
                             ('a, 'c) t_ * ('a, 'd) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val partition_tf :
                           ('a, 'b) t_ ->
                           f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                         val partitioni_tf :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> bool) ->
                           ('a, 'b) t_ * ('a, 'b) t_
                         val find_or_add :
                           ('a, 'b) t_ ->
                           'a key_ -> default:(unit -> 'b) -> 'b
                         val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                         val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                         val find_and_remove :
                           ('a, 'b) t_ -> 'a key_ -> 'b option
                         val iter_vals :
                           ('a, 'b) t_ -> f:('-> unit) -> unit
                         val merge :
                           ('c,
                            ('k, 'a) t_ ->
                            ('k, 'b) t_ ->
                            f:(key:'k key_ ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            ('k, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val merge_into :
                           f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                           src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                         val keys : ('a, 'b) t_ -> 'a key_ list
                         val data : ('a, 'b) t_ -> 'b list
                         val filter_inplace :
                           ('a, 'b) t_ -> f:('-> bool) -> unit
                         val filteri_inplace :
                           ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                         val equal :
                           ('a, 'b) t_ ->
                           ('a, 'b) t_ -> ('-> '-> bool) -> bool
                         val similar :
                           ('a, 'b1) t_ ->
                           ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                         val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                         val validate :
                           name:('a key_ -> string) ->
                           'Core_kernel.Validate.check ->
                           ('a, 'b) t_ Core_kernel.Validate.check
                         val incr :
                           ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                         val t_of_sexp :
                           (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                         val sexp_of_t :
                           ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                         val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                         val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                         val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                         val __bin_read_t__ :
                           ('a, int -> 'a t) Bin_prot.Read.reader1
                         val bin_writer_t :
                           ('a, 'a t) Bin_prot.Type_class.S1.writer
                         val bin_reader_t :
                           ('a, 'a t) Bin_prot.Type_class.S1.reader
                         val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                       end
                     module Pooled_hashtbl :
                       sig
                         type key = t
                         type ('a, 'b) hashtbl =
                             ('a, 'b) Core_kernel.Pooled_hashtbl.t
                         type 'b t = (key, 'b) hashtbl
                         type ('a, 'b) t_ = 'b t
                         type 'a key_ = key
                         val hashable :
                           key Core_kernel.Core_hashtbl_intf.Hashable.t
                         val create :
                           ('a key_, 'b, unit -> ('a, 'b) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist :
                           ('a key_, 'b,
                            ('a key_ * 'b) list ->
                            [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist_report_all_dups :
                           ('a key_, 'b,
                            ('a key_ * 'b) list ->
                            [ `Duplicate_keys of 'a key_ list
                            | `Ok of ('a, 'b) t_ ])
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist_or_error :
                           ('a key_, 'b,
                            ('a key_ * 'b) list ->
                            ('a, 'b) t_ Core_kernel.Or_error.t)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist_exn :
                           ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist_multi :
                           ('a key_, 'b list,
                            ('a key_ * 'b) list -> ('a, 'b list) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val create_mapped :
                           ('a key_, 'b,
                            get_key:('-> 'a key_) ->
                            get_data:('-> 'b) ->
                            'r list ->
                            [ `Duplicate_keys of 'a key_ list
                            | `Ok of ('a, 'b) t_ ])
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val create_with_key :
                           ('a key_, 'r,
                            get_key:('-> 'a key_) ->
                            'r list ->
                            [ `Duplicate_keys of 'a key_ list
                            | `Ok of ('a, 'r) t_ ])
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val create_with_key_exn :
                           ('a key_, 'r,
                            get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val group :
                           ('a key_, 'b,
                            get_key:('-> 'a key_) ->
                            get_data:('-> 'b) ->
                            combine:('-> '-> 'b) ->
                            'r list -> ('a, 'b) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val sexp_of_key :
                           ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                         val clear : ('a, 'b) t_ -> unit
                         val copy : ('a, 'b) t_ -> ('a, 'b) t_
                         val invariant : ('a, 'b) t_ -> unit
                         val fold :
                           ('a, 'b) t_ ->
                           init:'->
                           f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                         val iter :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> unit) -> unit
                         val existsi :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> bool) -> bool
                         val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                         val for_alli :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> bool) -> bool
                         val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                         val length : ('a, 'b) t_ -> int
                         val is_empty : ('a, 'b) t_ -> bool
                         val mem : ('a, 'b) t_ -> 'a key_ -> bool
                         val remove : ('a, 'b) t_ -> 'a key_ -> unit
                         val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                         val replace :
                           ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                         val set :
                           ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                         val add :
                           ('a, 'b) t_ ->
                           key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                         val add_exn :
                           ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                         val change :
                           ('a, 'b) t_ ->
                           'a key_ -> ('b option -> 'b option) -> unit
                         val add_multi :
                           ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                         val remove_multi :
                           ('a, 'b list) t_ -> 'a key_ -> unit
                         val map :
                           ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val mapi :
                           ('c,
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val filter_map :
                           ('c,
                            ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val filter_mapi :
                           ('c,
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> 'c option) ->
                            ('a, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val filter :
                           ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                         val filteri :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                         val partition_map :
                           ('c,
                            ('d,
                             ('a, 'b) t_ ->
                             f:('-> [ `Fst of '| `Snd of 'd ]) ->
                             ('a, 'c) t_ * ('a, 'd) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val partition_mapi :
                           ('c,
                            ('d,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ ->
                                data:'-> [ `Fst of '| `Snd of 'd ]) ->
                             ('a, 'c) t_ * ('a, 'd) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val partition_tf :
                           ('a, 'b) t_ ->
                           f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                         val partitioni_tf :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> bool) ->
                           ('a, 'b) t_ * ('a, 'b) t_
                         val find_or_add :
                           ('a, 'b) t_ ->
                           'a key_ -> default:(unit -> 'b) -> 'b
                         val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                         val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                         val find_and_remove :
                           ('a, 'b) t_ -> 'a key_ -> 'b option
                         val iter_vals :
                           ('a, 'b) t_ -> f:('-> unit) -> unit
                         val merge :
                           ('c,
                            ('k, 'a) t_ ->
                            ('k, 'b) t_ ->
                            f:(key:'k key_ ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            ('k, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val merge_into :
                           f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                           src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                         val keys : ('a, 'b) t_ -> 'a key_ list
                         val data : ('a, 'b) t_ -> 'b list
                         val filter_inplace :
                           ('a, 'b) t_ -> f:('-> bool) -> unit
                         val filteri_inplace :
                           ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                         val equal :
                           ('a, 'b) t_ ->
                           ('a, 'b) t_ -> ('-> '-> bool) -> bool
                         val similar :
                           ('a, 'b1) t_ ->
                           ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                         val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                         val validate :
                           name:('a key_ -> string) ->
                           'Core_kernel.Validate.check ->
                           ('a, 'b) t_ Core_kernel.Validate.check
                         val incr :
                           ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                         val t_of_sexp :
                           (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                         val sexp_of_t :
                           ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                         val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                         val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                         val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                         val __bin_read_t__ :
                           ('a, int -> 'a t) Bin_prot.Read.reader1
                         val bin_writer_t :
                           ('a, 'a t) Bin_prot.Type_class.S1.writer
                         val bin_reader_t :
                           ('a, 'a t) Bin_prot.Type_class.S1.reader
                         val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                       end
                     module Hash_set :
                       sig
                         type elt = t
                         type 'a hash_set = 'Core_kernel.Hash_set.t
                         type t = elt hash_set
                         type 'a t_ = t
                         type 'a elt_ = elt
                         val create :
                           ('a, unit -> 'a t_)
                           Core_kernel.Hash_set_intf.create_options_without_hashable
                         val of_list :
                           ('a, 'a elt_ list -> 'a t_)
                           Core_kernel.Hash_set_intf.create_options_without_hashable
                         val t_of_sexp : Sexplib.Sexp.t -> t
                         val sexp_of_t : t -> Sexplib.Sexp.t
                         val bin_size_t : t Bin_prot.Size.sizer
                         val bin_write_t : t Bin_prot.Write.writer
                         val bin_read_t : t Bin_prot.Read.reader
                         val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                         val bin_writer_t : t Bin_prot.Type_class.writer
                         val bin_reader_t : t Bin_prot.Type_class.reader
                         val bin_t : t Bin_prot.Type_class.t
                       end
                     module Hash_queue :
                       sig
                         module Key :
                           sig
                             type t = t
                             val hash : t -> int
                             val t_of_sexp : Sexplib.Sexp.t -> t
                             val sexp_of_t : t -> Sexplib.Sexp.t
                             val compare : t -> t -> int
                           end
                         type 'a t
                         val length : 'a t -> int
                         val is_empty : 'a t -> bool
                         val iter : 'a t -> f:('-> unit) -> unit
                         val fold :
                           'a t ->
                           init:'accum ->
                           f:('accum -> '-> 'accum) -> 'accum
                         val exists : 'a t -> f:('-> bool) -> bool
                         val for_all : 'a t -> f:('-> bool) -> bool
                         val count : 'a t -> f:('-> bool) -> int
                         val sum :
                           (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                           'a t -> f:('-> 'sum) -> 'sum
                         val find : 'a t -> f:('-> bool) -> 'a option
                         val find_map :
                           'a t -> f:('-> 'b option) -> 'b option
                         val to_list : 'a t -> 'a list
                         val to_array : 'a t -> 'a array
                         val min_elt :
                           'a t -> cmp:('-> '-> int) -> 'a option
                         val max_elt :
                           'a t -> cmp:('-> '-> int) -> 'a option
                         val invariant : 'a t -> unit
                         val create : unit -> 'a t
                         val clear : 'a t -> unit
                         val mem : 'a t -> Key.t -> bool
                         val lookup : 'a t -> Key.t -> 'a option
                         val lookup_exn : 'a t -> Key.t -> 'a
                         val enqueue :
                           'a t ->
                           Key.t -> '-> [ `Key_already_present | `Ok ]
                         val enqueue_exn : 'a t -> Key.t -> '-> unit
                         val first : 'a t -> 'a option
                         val keys : 'a t -> Key.t list
                         val dequeue : 'a t -> 'a option
                         val dequeue_exn : 'a t -> 'a
                         val dequeue_with_key : 'a t -> (Key.t * 'a) option
                         val dequeue_with_key_exn : 'a t -> Key.t * 'a
                         val dequeue_all : 'a t -> f:('-> unit) -> unit
                         val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                         val remove_exn : 'a t -> Key.t -> unit
                         val replace :
                           'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                         val replace_exn : 'a t -> Key.t -> '-> unit
                         val iteri :
                           'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                         val foldi :
                           'a t ->
                           init:'->
                           f:('-> key:Key.t -> data:'-> 'b) -> 'b
                       end
                     val pp : Format.formatter -> t -> unit
                     val t_of_sexp : Sexplib.Sexp.t -> t
                     val sexp_of_t : t -> Sexplib.Sexp.t
                     val bin_t : t Bin_prot.Type_class.t
                     val bin_read_t : t Bin_prot.Read.reader
                     val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                     val bin_reader_t : t Bin_prot.Type_class.reader
                     val bin_size_t : t Bin_prot.Size.sizer
                     val bin_write_t : t Bin_prot.Write.writer
                     val bin_writer_t : t Bin_prot.Type_class.writer
                     val of_json : Ezjsonm.t -> t
                     val to_json : t -> Ezjsonm.t
                     val of_raw : string -> t
                     val to_raw : t -> string
                     val of_bytes : Core_kernel.Std.Bigstring.t -> t
                     val of_bytes' : string -> t
                     val master : t
                   end
                 module Value :
                   sig
                     type t = value
                     val of_string : string -> t
                     val to_string : t -> string
                     val ( >= ) : t -> t -> bool
                     val ( <= ) : t -> t -> bool
                     val ( = ) : t -> t -> bool
                     val ( > ) : t -> t -> bool
                     val ( < ) : t -> t -> bool
                     val ( <> ) : t -> t -> bool
                     val equal : t -> t -> bool
                     val compare : t -> t -> int
                     val min : t -> t -> t
                     val max : t -> t -> t
                     val ascending : t -> t -> int
                     val descending : t -> t -> int
                     val between : t -> low:t -> high:t -> bool
                     module Replace_polymorphic_compare :
                       sig
                         val ( >= ) : t -> t -> bool
                         val ( <= ) : t -> t -> bool
                         val ( = ) : t -> t -> bool
                         val ( > ) : t -> t -> bool
                         val ( < ) : t -> t -> bool
                         val ( <> ) : t -> t -> bool
                         val equal : t -> t -> bool
                         val compare : t -> t -> int
                         val min : t -> t -> t
                         val max : t -> t -> t
                         val _squelch_unused_module_warning_ : unit
                       end
                     type comparator_witness
                     val validate_lbound :
                       min:t Core_kernel.Comparable_intf.bound ->
                       t Core_kernel.Validate.check
                     val validate_ubound :
                       max:t Core_kernel.Comparable_intf.bound ->
                       t Core_kernel.Validate.check
                     val validate_bound :
                       min:t Core_kernel.Comparable_intf.bound ->
                       max:t Core_kernel.Comparable_intf.bound ->
                       t Core_kernel.Validate.check
                     val comparator :
                       (t, comparator_witness)
                       Core_kernel.Comparator.comparator
                     module Map :
                       sig
                         module Key :
                           sig
                             type t = t
                             type comparator_witness = comparator_witness
                             val comparator :
                               (t, comparator_witness)
                               Core_kernel.Comparator.comparator
                           end
                         module Tree :
                           sig
                             type 'a t =
                                 (Key.t, 'a, Key.comparator_witness)
                                 Core_kernel.Core_map.Tree.t
                             val empty : 'a t
                             val singleton : Key.t -> '-> 'a t
                             val of_alist :
                               (Key.t * 'a) list ->
                               [ `Duplicate_key of Key.t | `Ok of 'a t ]
                             val of_alist_or_error :
                               (Key.t * 'a) list ->
                               'a t Core_kernel.Or_error.t
                             val of_alist_exn : (Key.t * 'a) list -> 'a t
                             val of_alist_multi :
                               (Key.t * 'a) list -> 'a list t
                             val of_alist_fold :
                               (Key.t * 'a) list ->
                               init:'-> f:('-> '-> 'b) -> 'b t
                             val of_alist_reduce :
                               (Key.t * 'a) list ->
                               f:('-> '-> 'a) -> 'a t
                             val of_sorted_array :
                               (Key.t * 'a) array ->
                               'a t Core_kernel.Or_error.t
                             val of_sorted_array_unchecked :
                               (Key.t * 'a) array -> 'a t
                             val of_tree : 'a t -> 'a t
                             val invariants : 'a t -> bool
                             val is_empty : 'a t -> bool
                             val length : 'a t -> int
                             val add : 'a t -> key:Key.t -> data:'-> 'a t
                             val add_multi :
                               'a list t -> key:Key.t -> data:'-> 'a list t
                             val change :
                               'a t ->
                               Key.t -> ('a option -> 'a option) -> 'a t
                             val find : 'a t -> Key.t -> 'a option
                             val find_exn : 'a t -> Key.t -> 'a
                             val remove : 'a t -> Key.t -> 'a t
                             val mem : 'a t -> Key.t -> bool
                             val iter :
                               'a t ->
                               f:(key:Key.t -> data:'-> unit) -> unit
                             val iter2 :
                               'a t ->
                               'b t ->
                               f:(key:Key.t ->
                                  data:[ `Both of 'a * 'b
                                       | `Left of 'a
                                       | `Right of 'b ] ->
                                  unit) ->
                               unit
                             val map : 'a t -> f:('-> 'b) -> 'b t
                             val mapi :
                               'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                             val fold :
                               'a t ->
                               init:'->
                               f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                             val fold_right :
                               'a t ->
                               init:'->
                               f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                             val filter :
                               'a t ->
                               f:(key:Key.t -> data:'-> bool) -> 'a t
                             val filter_map :
                               'a t -> f:('-> 'b option) -> 'b t
                             val filter_mapi :
                               'a t ->
                               f:(key:Key.t -> data:'-> 'b option) -> 'b t
                             val compare_direct :
                               ('-> '-> int) -> 'a t -> 'a t -> int
                             val equal :
                               ('-> '-> bool) -> 'a t -> 'a t -> bool
                             val keys : 'a t -> Key.t list
                             val data : 'a t -> 'a list
                             val to_alist : 'a t -> (Key.t * 'a) list
                             val validate :
                               name:(Key.t -> string) ->
                               'Core_kernel.Validate.check ->
                               'a t Core_kernel.Validate.check
                             val merge :
                               'a t ->
                               'b t ->
                               f:(key:Key.t ->
                                  [ `Both of 'a * 'b
                                  | `Left of 'a
                                  | `Right of 'b ] -> 'c option) ->
                               'c t
                             val symmetric_diff :
                               'a t ->
                               'a t ->
                               data_equal:('-> '-> bool) ->
                               (Key.t *
                                [ `Left of 'a
                                | `Right of 'a
                                | `Unequal of 'a * 'a ])
                               Core_kernel.Sequence.t
                             val min_elt : 'a t -> (Key.t * 'a) option
                             val min_elt_exn : 'a t -> Key.t * 'a
                             val max_elt : 'a t -> (Key.t * 'a) option
                             val max_elt_exn : 'a t -> Key.t * 'a
                             val for_all : 'a t -> f:('-> bool) -> bool
                             val exists : 'a t -> f:('-> bool) -> bool
                             val fold_range_inclusive :
                               'a t ->
                               min:Key.t ->
                               max:Key.t ->
                               init:'->
                               f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                             val range_to_alist :
                               'a t ->
                               min:Key.t -> max:Key.t -> (Key.t * 'a) list
                             val prev_key :
                               'a t -> Key.t -> (Key.t * 'a) option
                             val next_key :
                               'a t -> Key.t -> (Key.t * 'a) option
                             val rank : 'a t -> Key.t -> int option
                             val to_tree : 'a t -> 'a t
                             val to_sequence :
                               ?keys_in:[ `Decreasing_order
                                        | `Decreasing_order_less_than_or_equal_to of
                                            Key.t
                                        | `Increasing_order
                                        | `Increasing_order_greater_than_or_equal_to of
                                            Key.t ] ->
                               'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                             val t_of_sexp :
                               (Sexplib.Sexp.t -> 'a) ->
                               Sexplib.Sexp.t -> 'a t
                             val sexp_of_t :
                               ('-> Sexplib.Sexp.t) ->
                               'a t -> Sexplib.Sexp.t
                           end
                         type 'a t =
                             (Key.t, 'a, Key.comparator_witness)
                             Core_kernel.Core_map.t
                         val empty : 'a t
                         val singleton : Key.t -> '-> 'a t
                         val of_alist :
                           (Key.t * 'a) list ->
                           [ `Duplicate_key of Key.t | `Ok of 'a t ]
                         val of_alist_or_error :
                           (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                         val of_alist_exn : (Key.t * 'a) list -> 'a t
                         val of_alist_multi : (Key.t * 'a) list -> 'a list t
                         val of_alist_fold :
                           (Key.t * 'a) list ->
                           init:'-> f:('-> '-> 'b) -> 'b t
                         val of_alist_reduce :
                           (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                         val of_sorted_array :
                           (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                         val of_sorted_array_unchecked :
                           (Key.t * 'a) array -> 'a t
                         val of_tree : 'Tree.t -> 'a t
                         val invariants : 'a t -> bool
                         val is_empty : 'a t -> bool
                         val length : 'a t -> int
                         val add : 'a t -> key:Key.t -> data:'-> 'a t
                         val add_multi :
                           'a list t -> key:Key.t -> data:'-> 'a list t
                         val change :
                           'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                         val find : 'a t -> Key.t -> 'a option
                         val find_exn : 'a t -> Key.t -> 'a
                         val remove : 'a t -> Key.t -> 'a t
                         val mem : 'a t -> Key.t -> bool
                         val iter :
                           'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                         val iter2 :
                           'a t ->
                           'b t ->
                           f:(key:Key.t ->
                              data:[ `Both of 'a * 'b
                                   | `Left of 'a
                                   | `Right of 'b ] ->
                              unit) ->
                           unit
                         val map : 'a t -> f:('-> 'b) -> 'b t
                         val mapi :
                           'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                         val fold :
                           'a t ->
                           init:'->
                           f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                         val fold_right :
                           'a t ->
                           init:'->
                           f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                         val filter :
                           'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                         val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                         val filter_mapi :
                           'a t ->
                           f:(key:Key.t -> data:'-> 'b option) -> 'b t
                         val compare_direct :
                           ('-> '-> int) -> 'a t -> 'a t -> int
                         val equal :
                           ('-> '-> bool) -> 'a t -> 'a t -> bool
                         val keys : 'a t -> Key.t list
                         val data : 'a t -> 'a list
                         val to_alist : 'a t -> (Key.t * 'a) list
                         val validate :
                           name:(Key.t -> string) ->
                           'Core_kernel.Validate.check ->
                           'a t Core_kernel.Validate.check
                         val merge :
                           'a t ->
                           'b t ->
                           f:(key:Key.t ->
                              [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                              'c option) ->
                           'c t
                         val symmetric_diff :
                           'a t ->
                           'a t ->
                           data_equal:('-> '-> bool) ->
                           (Key.t *
                            [ `Left of 'a
                            | `Right of 'a
                            | `Unequal of 'a * 'a ])
                           Core_kernel.Sequence.t
                         val min_elt : 'a t -> (Key.t * 'a) option
                         val min_elt_exn : 'a t -> Key.t * 'a
                         val max_elt : 'a t -> (Key.t * 'a) option
                         val max_elt_exn : 'a t -> Key.t * 'a
                         val for_all : 'a t -> f:('-> bool) -> bool
                         val exists : 'a t -> f:('-> bool) -> bool
                         val fold_range_inclusive :
                           'a t ->
                           min:Key.t ->
                           max:Key.t ->
                           init:'->
                           f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                         val range_to_alist :
                           'a t ->
                           min:Key.t -> max:Key.t -> (Key.t * 'a) list
                         val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                         val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                         val rank : 'a t -> Key.t -> int option
                         val to_tree : 'a t -> 'Tree.t
                         val to_sequence :
                           ?keys_in:[ `Decreasing_order
                                    | `Decreasing_order_less_than_or_equal_to of
                                        Key.t
                                    | `Increasing_order
                                    | `Increasing_order_greater_than_or_equal_to of
                                        Key.t ] ->
                           'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                         val t_of_sexp :
                           (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                         val sexp_of_t :
                           ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                         val compare :
                           ('-> '-> int) -> 'a t -> 'a t -> int
                         val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                         val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                         val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                         val __bin_read_t__ :
                           ('a, int -> 'a t) Bin_prot.Read.reader1
                         val bin_writer_t :
                           ('a, 'a t) Bin_prot.Type_class.S1.writer
                         val bin_reader_t :
                           ('a, 'a t) Bin_prot.Type_class.S1.reader
                         val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                       end
                     module Set :
                       sig
                         module Elt :
                           sig
                             type t = t
                             type comparator_witness = comparator_witness
                             val comparator :
                               (t, comparator_witness)
                               Core_kernel.Comparator.comparator
                             val t_of_sexp : Sexplib.Sexp.t -> t
                             val sexp_of_t : t -> Sexplib.Sexp.t
                           end
                         module Tree :
                           sig
                             type t =
                                 (Elt.t, Elt.comparator_witness)
                                 Core_kernel.Core_set.Tree.t
                             val length : t -> int
                             val is_empty : t -> bool
                             val iter : t -> f:(Elt.t -> unit) -> unit
                             val fold :
                               t ->
                               init:'accum ->
                               f:('accum -> Elt.t -> 'accum) -> 'accum
                             val exists : t -> f:(Elt.t -> bool) -> bool
                             val for_all : t -> f:(Elt.t -> bool) -> bool
                             val count : t -> f:(Elt.t -> bool) -> int
                             val sum :
                               (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                               t -> f:(Elt.t -> 'sum) -> 'sum
                             val find :
                               t -> f:(Elt.t -> bool) -> Elt.t option
                             val find_map :
                               t -> f:(Elt.t -> 'a option) -> 'a option
                             val to_list : t -> Elt.t list
                             val to_array : t -> Elt.t array
                             val invariants : t -> bool
                             val mem : t -> Elt.t -> bool
                             val add : t -> Elt.t -> t
                             val remove : t -> Elt.t -> t
                             val union : t -> t -> t
                             val inter : t -> t -> t
                             val diff : t -> t -> t
                             val compare_direct : t -> t -> int
                             val equal : t -> t -> bool
                             val subset : t -> t -> bool
                             val fold_until :
                               t ->
                               init:'->
                               f:('->
                                  Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                               'b
                             val fold_right :
                               t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                             val iter2 :
                               t ->
                               t ->
                               f:([ `Both of Elt.t * Elt.t
                                  | `Left of Elt.t
                                  | `Right of Elt.t ] -> unit) ->
                               unit
                             val filter : t -> f:(Elt.t -> bool) -> t
                             val partition_tf :
                               t -> f:(Elt.t -> bool) -> t * t
                             val elements : t -> Elt.t list
                             val min_elt : t -> Elt.t option
                             val min_elt_exn : t -> Elt.t
                             val max_elt : t -> Elt.t option
                             val max_elt_exn : t -> Elt.t
                             val choose : t -> Elt.t option
                             val choose_exn : t -> Elt.t
                             val split : t -> Elt.t -> t * bool * t
                             val group_by :
                               t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                             val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                             val find_index : t -> int -> Elt.t option
                             val remove_index : t -> int -> t
                             val to_tree : t -> t
                             val to_sequence :
                               ?in_:[ `Decreasing_order
                                    | `Decreasing_order_less_than_or_equal_to of
                                        Elt.t
                                    | `Increasing_order
                                    | `Increasing_order_greater_than_or_equal_to of
                                        Elt.t ] ->
                               t -> Elt.t Core_kernel.Sequence.t
                             val to_map :
                               t ->
                               f:(Elt.t -> 'data) ->
                               (Elt.t, 'data, Elt.comparator_witness)
                               Core_kernel.Core_set_intf.Map.t
                             val empty : t
                             val singleton : Elt.t -> t
                             val union_list : t list -> t
                             val of_list : Elt.t list -> t
                             val of_array : Elt.t array -> t
                             val of_sorted_array :
                               Elt.t array -> t Core_kernel.Or_error.t
                             val of_sorted_array_unchecked : Elt.t array -> t
                             val stable_dedup_list : Elt.t list -> Elt.t list
                             val map :
                               ('a, 'b) Core_kernel.Core_set.Tree.t ->
                               f:('-> Elt.t) -> t
                             val filter_map :
                               ('a, 'b) Core_kernel.Core_set.Tree.t ->
                               f:('-> Elt.t option) -> t
                             val of_tree : t -> t
                             val of_map_keys :
                               (Elt.t, 'a, Elt.comparator_witness)
                               Core_kernel.Core_set_intf.Map.t -> t
                             val t_of_sexp : Sexplib.Sexp.t -> t
                             val sexp_of_t : t -> Sexplib.Sexp.t
                             val compare : t -> t -> int
                           end
                         type t =
                             (Elt.t, Elt.comparator_witness)
                             Core_kernel.Core_set.t
                         val length : t -> int
                         val is_empty : t -> bool
                         val iter : t -> f:(Elt.t -> unit) -> unit
                         val fold :
                           t ->
                           init:'accum ->
                           f:('accum -> Elt.t -> 'accum) -> 'accum
                         val exists : t -> f:(Elt.t -> bool) -> bool
                         val for_all : t -> f:(Elt.t -> bool) -> bool
                         val count : t -> f:(Elt.t -> bool) -> int
                         val sum :
                           (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                           t -> f:(Elt.t -> 'sum) -> 'sum
                         val find : t -> f:(Elt.t -> bool) -> Elt.t option
                         val find_map :
                           t -> f:(Elt.t -> 'a option) -> 'a option
                         val to_list : t -> Elt.t list
                         val to_array : t -> Elt.t array
                         val invariants : t -> bool
                         val mem : t -> Elt.t -> bool
                         val add : t -> Elt.t -> t
                         val remove : t -> Elt.t -> t
                         val union : t -> t -> t
                         val inter : t -> t -> t
                         val diff : t -> t -> t
                         val compare_direct : t -> t -> int
                         val equal : t -> t -> bool
                         val subset : t -> t -> bool
                         val fold_until :
                           t ->
                           init:'->
                           f:('->
                              Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                           'b
                         val fold_right :
                           t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                         val iter2 :
                           t ->
                           t ->
                           f:([ `Both of Elt.t * Elt.t
                              | `Left of Elt.t
                              | `Right of Elt.t ] -> unit) ->
                           unit
                         val filter : t -> f:(Elt.t -> bool) -> t
                         val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                         val elements : t -> Elt.t list
                         val min_elt : t -> Elt.t option
                         val min_elt_exn : t -> Elt.t
                         val max_elt : t -> Elt.t option
                         val max_elt_exn : t -> Elt.t
                         val choose : t -> Elt.t option
                         val choose_exn : t -> Elt.t
                         val split : t -> Elt.t -> t * bool * t
                         val group_by :
                           t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                         val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                         val find_index : t -> int -> Elt.t option
                         val remove_index : t -> int -> t
                         val to_tree : t -> Tree.t
                         val to_sequence :
                           ?in_:[ `Decreasing_order
                                | `Decreasing_order_less_than_or_equal_to of
                                    Elt.t
                                | `Increasing_order
                                | `Increasing_order_greater_than_or_equal_to of
                                    Elt.t ] ->
                           t -> Elt.t Core_kernel.Sequence.t
                         val to_map :
                           t ->
                           f:(Elt.t -> 'data) ->
                           (Elt.t, 'data, Elt.comparator_witness)
                           Core_kernel.Core_set_intf.Map.t
                         val empty : t
                         val singleton : Elt.t -> t
                         val union_list : t list -> t
                         val of_list : Elt.t list -> t
                         val of_array : Elt.t array -> t
                         val of_sorted_array :
                           Elt.t array -> t Core_kernel.Or_error.t
                         val of_sorted_array_unchecked : Elt.t array -> t
                         val stable_dedup_list : Elt.t list -> Elt.t list
                         val map :
                           ('a, 'b) Core_kernel.Core_set.t ->
                           f:('-> Elt.t) -> t
                         val filter_map :
                           ('a, 'b) Core_kernel.Core_set.t ->
                           f:('-> Elt.t option) -> t
                         val of_tree : Tree.t -> t
                         val of_map_keys :
                           (Elt.t, 'a, Elt.comparator_witness)
                           Core_kernel.Core_set_intf.Map.t -> t
                         val t_of_sexp : Sexplib.Sexp.t -> t
                         val sexp_of_t : t -> Sexplib.Sexp.t
                         val compare : t -> t -> int
                         val bin_size_t : t Bin_prot.Size.sizer
                         val bin_write_t : t Bin_prot.Write.writer
                         val bin_read_t : t Bin_prot.Read.reader
                         val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                         val bin_writer_t : t Bin_prot.Type_class.writer
                         val bin_reader_t : t Bin_prot.Type_class.reader
                         val bin_t : t Bin_prot.Type_class.t
                       end
                     module Hashable : sig type t = t end
                     val hash : t -> int
                     val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
                     module Table :
                       sig
                         type key = t
                         type ('a, 'b) hashtbl =
                             ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                         type 'b t = (key, 'b) hashtbl
                         type ('a, 'b) t_ = 'b t
                         type 'a key_ = key
                         val hashable :
                           key Core_kernel.Core_hashtbl_intf.Hashable.t
                         val create :
                           ('a key_, 'b, unit -> ('a, 'b) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist :
                           ('a key_, 'b,
                            ('a key_ * 'b) list ->
                            [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist_report_all_dups :
                           ('a key_, 'b,
                            ('a key_ * 'b) list ->
                            [ `Duplicate_keys of 'a key_ list
                            | `Ok of ('a, 'b) t_ ])
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist_or_error :
                           ('a key_, 'b,
                            ('a key_ * 'b) list ->
                            ('a, 'b) t_ Core_kernel.Or_error.t)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist_exn :
                           ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist_multi :
                           ('a key_, 'b list,
                            ('a key_ * 'b) list -> ('a, 'b list) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val create_mapped :
                           ('a key_, 'b,
                            get_key:('-> 'a key_) ->
                            get_data:('-> 'b) ->
                            'r list ->
                            [ `Duplicate_keys of 'a key_ list
                            | `Ok of ('a, 'b) t_ ])
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val create_with_key :
                           ('a key_, 'r,
                            get_key:('-> 'a key_) ->
                            'r list ->
                            [ `Duplicate_keys of 'a key_ list
                            | `Ok of ('a, 'r) t_ ])
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val create_with_key_exn :
                           ('a key_, 'r,
                            get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val group :
                           ('a key_, 'b,
                            get_key:('-> 'a key_) ->
                            get_data:('-> 'b) ->
                            combine:('-> '-> 'b) ->
                            'r list -> ('a, 'b) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val sexp_of_key :
                           ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                         val clear : ('a, 'b) t_ -> unit
                         val copy : ('a, 'b) t_ -> ('a, 'b) t_
                         val invariant : ('a, 'b) t_ -> unit
                         val fold :
                           ('a, 'b) t_ ->
                           init:'->
                           f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                         val iter :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> unit) -> unit
                         val existsi :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> bool) -> bool
                         val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                         val for_alli :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> bool) -> bool
                         val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                         val length : ('a, 'b) t_ -> int
                         val is_empty : ('a, 'b) t_ -> bool
                         val mem : ('a, 'b) t_ -> 'a key_ -> bool
                         val remove : ('a, 'b) t_ -> 'a key_ -> unit
                         val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                         val replace :
                           ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                         val set :
                           ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                         val add :
                           ('a, 'b) t_ ->
                           key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                         val add_exn :
                           ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                         val change :
                           ('a, 'b) t_ ->
                           'a key_ -> ('b option -> 'b option) -> unit
                         val add_multi :
                           ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                         val remove_multi :
                           ('a, 'b list) t_ -> 'a key_ -> unit
                         val map :
                           ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val mapi :
                           ('c,
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val filter_map :
                           ('c,
                            ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val filter_mapi :
                           ('c,
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> 'c option) ->
                            ('a, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val filter :
                           ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                         val filteri :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                         val partition_map :
                           ('c,
                            ('d,
                             ('a, 'b) t_ ->
                             f:('-> [ `Fst of '| `Snd of 'd ]) ->
                             ('a, 'c) t_ * ('a, 'd) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val partition_mapi :
                           ('c,
                            ('d,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ ->
                                data:'-> [ `Fst of '| `Snd of 'd ]) ->
                             ('a, 'c) t_ * ('a, 'd) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val partition_tf :
                           ('a, 'b) t_ ->
                           f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                         val partitioni_tf :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> bool) ->
                           ('a, 'b) t_ * ('a, 'b) t_
                         val find_or_add :
                           ('a, 'b) t_ ->
                           'a key_ -> default:(unit -> 'b) -> 'b
                         val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                         val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                         val find_and_remove :
                           ('a, 'b) t_ -> 'a key_ -> 'b option
                         val iter_vals :
                           ('a, 'b) t_ -> f:('-> unit) -> unit
                         val merge :
                           ('c,
                            ('k, 'a) t_ ->
                            ('k, 'b) t_ ->
                            f:(key:'k key_ ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            ('k, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val merge_into :
                           f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                           src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                         val keys : ('a, 'b) t_ -> 'a key_ list
                         val data : ('a, 'b) t_ -> 'b list
                         val filter_inplace :
                           ('a, 'b) t_ -> f:('-> bool) -> unit
                         val filteri_inplace :
                           ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                         val equal :
                           ('a, 'b) t_ ->
                           ('a, 'b) t_ -> ('-> '-> bool) -> bool
                         val similar :
                           ('a, 'b1) t_ ->
                           ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                         val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                         val validate :
                           name:('a key_ -> string) ->
                           'Core_kernel.Validate.check ->
                           ('a, 'b) t_ Core_kernel.Validate.check
                         val incr :
                           ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                         val t_of_sexp :
                           (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                         val sexp_of_t :
                           ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                         val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                         val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                         val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                         val __bin_read_t__ :
                           ('a, int -> 'a t) Bin_prot.Read.reader1
                         val bin_writer_t :
                           ('a, 'a t) Bin_prot.Type_class.S1.writer
                         val bin_reader_t :
                           ('a, 'a t) Bin_prot.Type_class.S1.reader
                         val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                       end
                     module Pooled_hashtbl :
                       sig
                         type key = t
                         type ('a, 'b) hashtbl =
                             ('a, 'b) Core_kernel.Pooled_hashtbl.t
                         type 'b t = (key, 'b) hashtbl
                         type ('a, 'b) t_ = 'b t
                         type 'a key_ = key
                         val hashable :
                           key Core_kernel.Core_hashtbl_intf.Hashable.t
                         val create :
                           ('a key_, 'b, unit -> ('a, 'b) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist :
                           ('a key_, 'b,
                            ('a key_ * 'b) list ->
                            [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist_report_all_dups :
                           ('a key_, 'b,
                            ('a key_ * 'b) list ->
                            [ `Duplicate_keys of 'a key_ list
                            | `Ok of ('a, 'b) t_ ])
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist_or_error :
                           ('a key_, 'b,
                            ('a key_ * 'b) list ->
                            ('a, 'b) t_ Core_kernel.Or_error.t)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist_exn :
                           ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val of_alist_multi :
                           ('a key_, 'b list,
                            ('a key_ * 'b) list -> ('a, 'b list) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val create_mapped :
                           ('a key_, 'b,
                            get_key:('-> 'a key_) ->
                            get_data:('-> 'b) ->
                            'r list ->
                            [ `Duplicate_keys of 'a key_ list
                            | `Ok of ('a, 'b) t_ ])
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val create_with_key :
                           ('a key_, 'r,
                            get_key:('-> 'a key_) ->
                            'r list ->
                            [ `Duplicate_keys of 'a key_ list
                            | `Ok of ('a, 'r) t_ ])
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val create_with_key_exn :
                           ('a key_, 'r,
                            get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val group :
                           ('a key_, 'b,
                            get_key:('-> 'a key_) ->
                            get_data:('-> 'b) ->
                            combine:('-> '-> 'b) ->
                            'r list -> ('a, 'b) t_)
                           Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                         val sexp_of_key :
                           ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                         val clear : ('a, 'b) t_ -> unit
                         val copy : ('a, 'b) t_ -> ('a, 'b) t_
                         val invariant : ('a, 'b) t_ -> unit
                         val fold :
                           ('a, 'b) t_ ->
                           init:'->
                           f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                         val iter :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> unit) -> unit
                         val existsi :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> bool) -> bool
                         val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                         val for_alli :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> bool) -> bool
                         val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                         val length : ('a, 'b) t_ -> int
                         val is_empty : ('a, 'b) t_ -> bool
                         val mem : ('a, 'b) t_ -> 'a key_ -> bool
                         val remove : ('a, 'b) t_ -> 'a key_ -> unit
                         val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                         val replace :
                           ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                         val set :
                           ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                         val add :
                           ('a, 'b) t_ ->
                           key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                         val add_exn :
                           ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                         val change :
                           ('a, 'b) t_ ->
                           'a key_ -> ('b option -> 'b option) -> unit
                         val add_multi :
                           ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                         val remove_multi :
                           ('a, 'b list) t_ -> 'a key_ -> unit
                         val map :
                           ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val mapi :
                           ('c,
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val filter_map :
                           ('c,
                            ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val filter_mapi :
                           ('c,
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> 'c option) ->
                            ('a, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val filter :
                           ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                         val filteri :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                         val partition_map :
                           ('c,
                            ('d,
                             ('a, 'b) t_ ->
                             f:('-> [ `Fst of '| `Snd of 'd ]) ->
                             ('a, 'c) t_ * ('a, 'd) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val partition_mapi :
                           ('c,
                            ('d,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ ->
                                data:'-> [ `Fst of '| `Snd of 'd ]) ->
                             ('a, 'c) t_ * ('a, 'd) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val partition_tf :
                           ('a, 'b) t_ ->
                           f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                         val partitioni_tf :
                           ('a, 'b) t_ ->
                           f:(key:'a key_ -> data:'-> bool) ->
                           ('a, 'b) t_ * ('a, 'b) t_
                         val find_or_add :
                           ('a, 'b) t_ ->
                           'a key_ -> default:(unit -> 'b) -> 'b
                         val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                         val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                         val find_and_remove :
                           ('a, 'b) t_ -> 'a key_ -> 'b option
                         val iter_vals :
                           ('a, 'b) t_ -> f:('-> unit) -> unit
                         val merge :
                           ('c,
                            ('k, 'a) t_ ->
                            ('k, 'b) t_ ->
                            f:(key:'k key_ ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            ('k, 'c) t_)
                           Core_kernel.Core_hashtbl_intf.no_map_options
                         val merge_into :
                           f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                           src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                         val keys : ('a, 'b) t_ -> 'a key_ list
                         val data : ('a, 'b) t_ -> 'b list
                         val filter_inplace :
                           ('a, 'b) t_ -> f:('-> bool) -> unit
                         val filteri_inplace :
                           ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                         val equal :
                           ('a, 'b) t_ ->
                           ('a, 'b) t_ -> ('-> '-> bool) -> bool
                         val similar :
                           ('a, 'b1) t_ ->
                           ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                         val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                         val validate :
                           name:('a key_ -> string) ->
                           'Core_kernel.Validate.check ->
                           ('a, 'b) t_ Core_kernel.Validate.check
                         val incr :
                           ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                         val t_of_sexp :
                           (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                         val sexp_of_t :
                           ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                         val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                         val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                         val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                         val __bin_read_t__ :
                           ('a, int -> 'a t) Bin_prot.Read.reader1
                         val bin_writer_t :
                           ('a, 'a t) Bin_prot.Type_class.S1.writer
                         val bin_reader_t :
                           ('a, 'a t) Bin_prot.Type_class.S1.reader
                         val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                       end
                     module Hash_set :
                       sig
                         type elt = t
                         type 'a hash_set = 'Core_kernel.Hash_set.t
                         type t = elt hash_set
                         type 'a t_ = t
                         type 'a elt_ = elt
                         val create :
                           ('a, unit -> 'a t_)
                           Core_kernel.Hash_set_intf.create_options_without_hashable
                         val of_list :
                           ('a, 'a elt_ list -> 'a t_)
                           Core_kernel.Hash_set_intf.create_options_without_hashable
                         val t_of_sexp : Sexplib.Sexp.t -> t
                         val sexp_of_t : t -> Sexplib.Sexp.t
                         val bin_size_t : t Bin_prot.Size.sizer
                         val bin_write_t : t Bin_prot.Write.writer
                         val bin_read_t : t Bin_prot.Read.reader
                         val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                         val bin_writer_t : t Bin_prot.Type_class.writer
                         val bin_reader_t : t Bin_prot.Type_class.reader
                         val bin_t : t Bin_prot.Type_class.t
                       end
                     module Hash_queue :
                       sig
                         module Key :
                           sig
                             type t = t
                             val hash : t -> int
                             val t_of_sexp : Sexplib.Sexp.t -> t
                             val sexp_of_t : t -> Sexplib.Sexp.t
                             val compare : t -> t -> int
                           end
                         type 'a t
                         val length : 'a t -> int
                         val is_empty : 'a t -> bool
                         val iter : 'a t -> f:('-> unit) -> unit
                         val fold :
                           'a t ->
                           init:'accum ->
                           f:('accum -> '-> 'accum) -> 'accum
                         val exists : 'a t -> f:('-> bool) -> bool
                         val for_all : 'a t -> f:('-> bool) -> bool
                         val count : 'a t -> f:('-> bool) -> int
                         val sum :
                           (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                           'a t -> f:('-> 'sum) -> 'sum
                         val find : 'a t -> f:('-> bool) -> 'a option
                         val find_map :
                           'a t -> f:('-> 'b option) -> 'b option
                         val to_list : 'a t -> 'a list
                         val to_array : 'a t -> 'a array
                         val min_elt :
                           'a t -> cmp:('-> '-> int) -> 'a option
                         val max_elt :
                           'a t -> cmp:('-> '-> int) -> 'a option
                         val invariant : 'a t -> unit
                         val create : unit -> 'a t
                         val clear : 'a t -> unit
                         val mem : 'a t -> Key.t -> bool
                         val lookup : 'a t -> Key.t -> 'a option
                         val lookup_exn : 'a t -> Key.t -> 'a
                         val enqueue :
                           'a t ->
                           Key.t -> '-> [ `Key_already_present | `Ok ]
                         val enqueue_exn : 'a t -> Key.t -> '-> unit
                         val first : 'a t -> 'a option
                         val keys : 'a t -> Key.t list
                         val dequeue : 'a t -> 'a option
                         val dequeue_exn : 'a t -> 'a
                         val dequeue_with_key : 'a t -> (Key.t * 'a) option
                         val dequeue_with_key_exn : 'a t -> Key.t * 'a
                         val dequeue_all : 'a t -> f:('-> unit) -> unit
                         val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                         val remove_exn : 'a t -> Key.t -> unit
                         val replace :
                           'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                         val replace_exn : 'a t -> Key.t -> '-> unit
                         val iteri :
                           'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                         val foldi :
                           'a t ->
                           init:'->
                           f:('-> key:Key.t -> data:'-> 'b) -> 'b
                       end
                     val pp : Format.formatter -> t -> unit
                     val t_of_sexp : Sexplib.Sexp.t -> t
                     val sexp_of_t : t -> Sexplib.Sexp.t
                     val bin_t : t Bin_prot.Type_class.t
                     val bin_read_t : t Bin_prot.Read.reader
                     val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                     val bin_reader_t : t Bin_prot.Type_class.reader
                     val bin_size_t : t Bin_prot.Size.sizer
                     val bin_write_t : t Bin_prot.Write.writer
                     val bin_writer_t : t Bin_prot.Type_class.writer
                     val of_json : Ezjsonm.t -> t
                     val to_json : t -> Ezjsonm.t
                     val of_raw : string -> t
                     val to_raw : t -> string
                     val of_bytes : Core_kernel.Std.Bigstring.t -> t
                     val of_bytes' : string -> t
                   end
               end->
        sig
          type t
          type key = IrminPath.t
          type value = Block.contents
          val read : t -> key -> value option Lwt.t
          val read_exn : t -> key -> value Lwt.t
          val mem : t -> key -> bool Lwt.t
          val list : t -> key list -> key list Lwt.t
          val dump : t -> (key * value) list Lwt.t
          val watch : t -> key -> value Lwt_stream.t
          type branch = Tag.key
          type origin = IrminOrigin.t
          val create : ?branch:branch -> unit -> t Lwt.t
          val detach : t -> unit Lwt.t
          val branch : t -> branch option
          val branch_exn : t -> branch
          val set_branch : t -> branch -> unit
          val update : t -> ?origin:origin -> key -> value -> unit Lwt.t
          val remove : t -> ?origin:origin -> key -> unit Lwt.t
          val clone : t -> branch -> t option Lwt.t
          val clone_force : t -> branch -> t Lwt.t
          val switch : t -> branch -> unit Lwt.t
          val merge :
            t -> ?origin:origin -> branch -> unit IrminMerge.result Lwt.t
          val merge_exn : t -> ?origin:origin -> branch -> unit Lwt.t
          module Block :
            sig
              type key = Block.key
              type contents = Block.contents
              type value = (key, contents) IrminBlock.t
              type node = key IrminNode.t
              type commit = key IrminCommit.t
              type t = Block.t
              val create : unit -> t Lwt.t
              val read : t -> key -> value option Lwt.t
              val read_exn : t -> key -> value Lwt.t
              val mem : t -> key -> bool Lwt.t
              val dump : t -> (key * value) list Lwt.t
              val add : t -> value -> key Lwt.t
              val list : t -> ?depth:int -> key list -> key list Lwt.t
              module Contents :
                sig
                  type t = Block.Contents.t
                  type key = key
                  type value = contents
                  val create : unit -> t Lwt.t
                  val read : t -> key -> value option Lwt.t
                  val read_exn : t -> key -> value Lwt.t
                  val mem : t -> key -> bool Lwt.t
                  val list : t -> key list -> key list Lwt.t
                  val dump : t -> (key * value) list Lwt.t
                  val add : t -> value -> key Lwt.t
                  val merge : t -> key IrminMerge.t
                  module Key :
                    sig
                      type t = key
                      val of_string : string -> t
                      val to_string : t -> string
                      val ( >= ) : t -> t -> bool
                      val ( <= ) : t -> t -> bool
                      val ( = ) : t -> t -> bool
                      val ( > ) : t -> t -> bool
                      val ( < ) : t -> t -> bool
                      val ( <> ) : t -> t -> bool
                      val equal : t -> t -> bool
                      val compare : t -> t -> int
                      val min : t -> t -> t
                      val max : t -> t -> t
                      val ascending : t -> t -> int
                      val descending : t -> t -> int
                      val between : t -> low:t -> high:t -> bool
                      module Replace_polymorphic_compare :
                        sig
                          val ( >= ) : t -> t -> bool
                          val ( <= ) : t -> t -> bool
                          val ( = ) : t -> t -> bool
                          val ( > ) : t -> t -> bool
                          val ( < ) : t -> t -> bool
                          val ( <> ) : t -> t -> bool
                          val equal : t -> t -> bool
                          val compare : t -> t -> int
                          val min : t -> t -> t
                          val max : t -> t -> t
                          val _squelch_unused_module_warning_ : unit
                        end
                      type comparator_witness =
                          Block.Contents.Key.comparator_witness
                      val validate_lbound :
                        min:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val validate_ubound :
                        max:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val validate_bound :
                        min:t Core_kernel.Comparable_intf.bound ->
                        max:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                      module Map :
                        sig
                          module Key :
                            sig
                              type t = t
                              type comparator_witness = comparator_witness
                              val comparator :
                                (t, comparator_witness)
                                Core_kernel.Comparator.comparator
                            end
                          module Tree :
                            sig
                              type 'a t =
                                  (Key.t, 'a, Key.comparator_witness)
                                  Core_kernel.Core_map.Tree.t
                              val empty : 'a t
                              val singleton : Key.t -> '-> 'a t
                              val of_alist :
                                (Key.t * 'a) list ->
                                [ `Duplicate_key of Key.t | `Ok of 'a t ]
                              val of_alist_or_error :
                                (Key.t * 'a) list ->
                                'a t Core_kernel.Or_error.t
                              val of_alist_exn : (Key.t * 'a) list -> 'a t
                              val of_alist_multi :
                                (Key.t * 'a) list -> 'a list t
                              val of_alist_fold :
                                (Key.t * 'a) list ->
                                init:'-> f:('-> '-> 'b) -> 'b t
                              val of_alist_reduce :
                                (Key.t * 'a) list ->
                                f:('-> '-> 'a) -> 'a t
                              val of_sorted_array :
                                (Key.t * 'a) array ->
                                'a t Core_kernel.Or_error.t
                              val of_sorted_array_unchecked :
                                (Key.t * 'a) array -> 'a t
                              val of_tree : 'a t -> 'a t
                              val invariants : 'a t -> bool
                              val is_empty : 'a t -> bool
                              val length : 'a t -> int
                              val add : 'a t -> key:Key.t -> data:'-> 'a t
                              val add_multi :
                                'a list t ->
                                key:Key.t -> data:'-> 'a list t
                              val change :
                                'a t ->
                                Key.t -> ('a option -> 'a option) -> 'a t
                              val find : 'a t -> Key.t -> 'a option
                              val find_exn : 'a t -> Key.t -> 'a
                              val remove : 'a t -> Key.t -> 'a t
                              val mem : 'a t -> Key.t -> bool
                              val iter :
                                'a t ->
                                f:(key:Key.t -> data:'-> unit) -> unit
                              val iter2 :
                                'a t ->
                                'b t ->
                                f:(key:Key.t ->
                                   data:[ `Both of 'a * 'b
                                        | `Left of 'a
                                        | `Right of 'b ] ->
                                   unit) ->
                                unit
                              val map : 'a t -> f:('-> 'b) -> 'b t
                              val mapi :
                                'a t ->
                                f:(key:Key.t -> data:'-> 'b) -> 'b t
                              val fold :
                                'a t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val fold_right :
                                'a t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val filter :
                                'a t ->
                                f:(key:Key.t -> data:'-> bool) -> 'a t
                              val filter_map :
                                'a t -> f:('-> 'b option) -> 'b t
                              val filter_mapi :
                                'a t ->
                                f:(key:Key.t -> data:'-> 'b option) -> 'b t
                              val compare_direct :
                                ('-> '-> int) -> 'a t -> 'a t -> int
                              val equal :
                                ('-> '-> bool) -> 'a t -> 'a t -> bool
                              val keys : 'a t -> Key.t list
                              val data : 'a t -> 'a list
                              val to_alist : 'a t -> (Key.t * 'a) list
                              val validate :
                                name:(Key.t -> string) ->
                                'Core_kernel.Validate.check ->
                                'a t Core_kernel.Validate.check
                              val merge :
                                'a t ->
                                'b t ->
                                f:(key:Key.t ->
                                   [ `Both of 'a * 'b
                                   | `Left of 'a
                                   | `Right of 'b ] -> 'c option) ->
                                'c t
                              val symmetric_diff :
                                'a t ->
                                'a t ->
                                data_equal:('-> '-> bool) ->
                                (Key.t *
                                 [ `Left of 'a
                                 | `Right of 'a
                                 | `Unequal of 'a * 'a ])
                                Core_kernel.Sequence.t
                              val min_elt : 'a t -> (Key.t * 'a) option
                              val min_elt_exn : 'a t -> Key.t * 'a
                              val max_elt : 'a t -> (Key.t * 'a) option
                              val max_elt_exn : 'a t -> Key.t * 'a
                              val for_all : 'a t -> f:('-> bool) -> bool
                              val exists : 'a t -> f:('-> bool) -> bool
                              val fold_range_inclusive :
                                'a t ->
                                min:Key.t ->
                                max:Key.t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val range_to_alist :
                                'a t ->
                                min:Key.t -> max:Key.t -> (Key.t * 'a) list
                              val prev_key :
                                'a t -> Key.t -> (Key.t * 'a) option
                              val next_key :
                                'a t -> Key.t -> (Key.t * 'a) option
                              val rank : 'a t -> Key.t -> int option
                              val to_tree : 'a t -> 'a t
                              val to_sequence :
                                ?keys_in:[ `Decreasing_order
                                         | `Decreasing_order_less_than_or_equal_to of
                                             Key.t
                                         | `Increasing_order
                                         | `Increasing_order_greater_than_or_equal_to of
                                             Key.t ] ->
                                'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                              val t_of_sexp :
                                (Sexplib.Sexp.t -> 'a) ->
                                Sexplib.Sexp.t -> 'a t
                              val sexp_of_t :
                                ('-> Sexplib.Sexp.t) ->
                                'a t -> Sexplib.Sexp.t
                            end
                          type 'a t =
                              (Key.t, 'a, Key.comparator_witness)
                              Core_kernel.Core_map.t
                          val empty : 'a t
                          val singleton : Key.t -> '-> 'a t
                          val of_alist :
                            (Key.t * 'a) list ->
                            [ `Duplicate_key of Key.t | `Ok of 'a t ]
                          val of_alist_or_error :
                            (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                          val of_alist_exn : (Key.t * 'a) list -> 'a t
                          val of_alist_multi : (Key.t * 'a) list -> 'a list t
                          val of_alist_fold :
                            (Key.t * 'a) list ->
                            init:'-> f:('-> '-> 'b) -> 'b t
                          val of_alist_reduce :
                            (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                          val of_sorted_array :
                            (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked :
                            (Key.t * 'a) array -> 'a t
                          val of_tree : 'Tree.t -> 'a t
                          val invariants : 'a t -> bool
                          val is_empty : 'a t -> bool
                          val length : 'a t -> int
                          val add : 'a t -> key:Key.t -> data:'-> 'a t
                          val add_multi :
                            'a list t -> key:Key.t -> data:'-> 'a list t
                          val change :
                            'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                          val find : 'a t -> Key.t -> 'a option
                          val find_exn : 'a t -> Key.t -> 'a
                          val remove : 'a t -> Key.t -> 'a t
                          val mem : 'a t -> Key.t -> bool
                          val iter :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val iter2 :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               data:[ `Both of 'a * 'b
                                    | `Left of 'a
                                    | `Right of 'b ] ->
                               unit) ->
                            unit
                          val map : 'a t -> f:('-> 'b) -> 'b t
                          val mapi :
                            'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                          val fold :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val fold_right :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val filter :
                            'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                          val filter_map :
                            'a t -> f:('-> 'b option) -> 'b t
                          val filter_mapi :
                            'a t ->
                            f:(key:Key.t -> data:'-> 'b option) -> 'b t
                          val compare_direct :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val equal :
                            ('-> '-> bool) -> 'a t -> 'a t -> bool
                          val keys : 'a t -> Key.t list
                          val data : 'a t -> 'a list
                          val to_alist : 'a t -> (Key.t * 'a) list
                          val validate :
                            name:(Key.t -> string) ->
                            'Core_kernel.Validate.check ->
                            'a t Core_kernel.Validate.check
                          val merge :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            'c t
                          val symmetric_diff :
                            'a t ->
                            'a t ->
                            data_equal:('-> '-> bool) ->
                            (Key.t *
                             [ `Left of 'a
                             | `Right of 'a
                             | `Unequal of 'a * 'a ])
                            Core_kernel.Sequence.t
                          val min_elt : 'a t -> (Key.t * 'a) option
                          val min_elt_exn : 'a t -> Key.t * 'a
                          val max_elt : 'a t -> (Key.t * 'a) option
                          val max_elt_exn : 'a t -> Key.t * 'a
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val exists : 'a t -> f:('-> bool) -> bool
                          val fold_range_inclusive :
                            'a t ->
                            min:Key.t ->
                            max:Key.t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val range_to_alist :
                            'a t ->
                            min:Key.t -> max:Key.t -> (Key.t * 'a) list
                          val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val rank : 'a t -> Key.t -> int option
                          val to_tree : 'a t -> 'Tree.t
                          val to_sequence :
                            ?keys_in:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Key.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Key.t ] ->
                            'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                          val compare :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Set :
                        sig
                          module Elt :
                            sig
                              type t = t
                              type comparator_witness = comparator_witness
                              val comparator :
                                (t, comparator_witness)
                                Core_kernel.Comparator.comparator
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                            end
                          module Tree :
                            sig
                              type t =
                                  (Elt.t, Elt.comparator_witness)
                                  Core_kernel.Core_set.Tree.t
                              val length : t -> int
                              val is_empty : t -> bool
                              val iter : t -> f:(Elt.t -> unit) -> unit
                              val fold :
                                t ->
                                init:'accum ->
                                f:('accum -> Elt.t -> 'accum) -> 'accum
                              val exists : t -> f:(Elt.t -> bool) -> bool
                              val for_all : t -> f:(Elt.t -> bool) -> bool
                              val count : t -> f:(Elt.t -> bool) -> int
                              val sum :
                                (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                                t -> f:(Elt.t -> 'sum) -> 'sum
                              val find :
                                t -> f:(Elt.t -> bool) -> Elt.t option
                              val find_map :
                                t -> f:(Elt.t -> 'a option) -> 'a option
                              val to_list : t -> Elt.t list
                              val to_array : t -> Elt.t array
                              val invariants : t -> bool
                              val mem : t -> Elt.t -> bool
                              val add : t -> Elt.t -> t
                              val remove : t -> Elt.t -> t
                              val union : t -> t -> t
                              val inter : t -> t -> t
                              val diff : t -> t -> t
                              val compare_direct : t -> t -> int
                              val equal : t -> t -> bool
                              val subset : t -> t -> bool
                              val fold_until :
                                t ->
                                init:'->
                                f:('->
                                   Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                                'b
                              val fold_right :
                                t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                              val iter2 :
                                t ->
                                t ->
                                f:([ `Both of Elt.t * Elt.t
                                   | `Left of Elt.t
                                   | `Right of Elt.t ] -> unit) ->
                                unit
                              val filter : t -> f:(Elt.t -> bool) -> t
                              val partition_tf :
                                t -> f:(Elt.t -> bool) -> t * t
                              val elements : t -> Elt.t list
                              val min_elt : t -> Elt.t option
                              val min_elt_exn : t -> Elt.t
                              val max_elt : t -> Elt.t option
                              val max_elt_exn : t -> Elt.t
                              val choose : t -> Elt.t option
                              val choose_exn : t -> Elt.t
                              val split : t -> Elt.t -> t * bool * t
                              val group_by :
                                t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                              val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                              val find_index : t -> int -> Elt.t option
                              val remove_index : t -> int -> t
                              val to_tree : t -> t
                              val to_sequence :
                                ?in_:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Elt.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Elt.t ] ->
                                t -> Elt.t Core_kernel.Sequence.t
                              val to_map :
                                t ->
                                f:(Elt.t -> 'data) ->
                                (Elt.t, 'data, Elt.comparator_witness)
                                Core_kernel.Core_set_intf.Map.t
                              val empty : t
                              val singleton : Elt.t -> t
                              val union_list : t list -> t
                              val of_list : Elt.t list -> t
                              val of_array : Elt.t array -> t
                              val of_sorted_array :
                                Elt.t array -> t Core_kernel.Or_error.t
                              val of_sorted_array_unchecked :
                                Elt.t array -> t
                              val stable_dedup_list :
                                Elt.t list -> Elt.t list
                              val map :
                                ('a, 'b) Core_kernel.Core_set.Tree.t ->
                                f:('-> Elt.t) -> t
                              val filter_map :
                                ('a, 'b) Core_kernel.Core_set.Tree.t ->
                                f:('-> Elt.t option) -> t
                              val of_tree : t -> t
                              val of_map_keys :
                                (Elt.t, 'a, Elt.comparator_witness)
                                Core_kernel.Core_set_intf.Map.t -> t
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                              val compare : t -> t -> int
                            end
                          type t =
                              (Elt.t, Elt.comparator_witness)
                              Core_kernel.Core_set.t
                          val length : t -> int
                          val is_empty : t -> bool
                          val iter : t -> f:(Elt.t -> unit) -> unit
                          val fold :
                            t ->
                            init:'accum ->
                            f:('accum -> Elt.t -> 'accum) -> 'accum
                          val exists : t -> f:(Elt.t -> bool) -> bool
                          val for_all : t -> f:(Elt.t -> bool) -> bool
                          val count : t -> f:(Elt.t -> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            t -> f:(Elt.t -> 'sum) -> 'sum
                          val find : t -> f:(Elt.t -> bool) -> Elt.t option
                          val find_map :
                            t -> f:(Elt.t -> 'a option) -> 'a option
                          val to_list : t -> Elt.t list
                          val to_array : t -> Elt.t array
                          val invariants : t -> bool
                          val mem : t -> Elt.t -> bool
                          val add : t -> Elt.t -> t
                          val remove : t -> Elt.t -> t
                          val union : t -> t -> t
                          val inter : t -> t -> t
                          val diff : t -> t -> t
                          val compare_direct : t -> t -> int
                          val equal : t -> t -> bool
                          val subset : t -> t -> bool
                          val fold_until :
                            t ->
                            init:'->
                            f:('->
                               Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                            'b
                          val fold_right :
                            t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                          val iter2 :
                            t ->
                            t ->
                            f:([ `Both of Elt.t * Elt.t
                               | `Left of Elt.t
                               | `Right of Elt.t ] -> unit) ->
                            unit
                          val filter : t -> f:(Elt.t -> bool) -> t
                          val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                          val elements : t -> Elt.t list
                          val min_elt : t -> Elt.t option
                          val min_elt_exn : t -> Elt.t
                          val max_elt : t -> Elt.t option
                          val max_elt_exn : t -> Elt.t
                          val choose : t -> Elt.t option
                          val choose_exn : t -> Elt.t
                          val split : t -> Elt.t -> t * bool * t
                          val group_by :
                            t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                          val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                          val find_index : t -> int -> Elt.t option
                          val remove_index : t -> int -> t
                          val to_tree : t -> Tree.t
                          val to_sequence :
                            ?in_:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Elt.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Elt.t ] ->
                            t -> Elt.t Core_kernel.Sequence.t
                          val to_map :
                            t ->
                            f:(Elt.t -> 'data) ->
                            (Elt.t, 'data, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t
                          val empty : t
                          val singleton : Elt.t -> t
                          val union_list : t list -> t
                          val of_list : Elt.t list -> t
                          val of_array : Elt.t array -> t
                          val of_sorted_array :
                            Elt.t array -> t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked : Elt.t array -> t
                          val stable_dedup_list : Elt.t list -> Elt.t list
                          val map :
                            ('a, 'b) Core_kernel.Core_set.t ->
                            f:('-> Elt.t) -> t
                          val filter_map :
                            ('a, 'b) Core_kernel.Core_set.t ->
                            f:('-> Elt.t option) -> t
                          val of_tree : Tree.t -> t
                          val of_map_keys :
                            (Elt.t, 'a, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t -> t
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                          val bin_size_t : t Bin_prot.Size.sizer
                          val bin_write_t : t Bin_prot.Write.writer
                          val bin_read_t : t Bin_prot.Read.reader
                          val __bin_read_t__ :
                            (int -> t) Bin_prot.Read.reader
                          val bin_writer_t : t Bin_prot.Type_class.writer
                          val bin_reader_t : t Bin_prot.Type_class.reader
                          val bin_t : t Bin_prot.Type_class.t
                        end
                      module Hashable : sig type t = t end
                      val hash : t -> int
                      val hashable :
                        t Core_kernel.Hashable.Hashtbl.Hashable.t
                      module Table :
                        sig
                          type key = t
                          type ('a, 'b) hashtbl =
                              ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                          type 'b t = (key, 'b) hashtbl
                          type ('a, 'b) t_ = 'b t
                          type 'a key_ = key
                          val hashable :
                            key Core_kernel.Core_hashtbl_intf.Hashable.t
                          val create :
                            ('a key_, 'b, unit -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_report_all_dups :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_or_error :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             ('a, 'b) t_ Core_kernel.Or_error.t)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_exn :
                            ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_multi :
                            ('a key_, 'b list,
                             ('a key_ * 'b) list -> ('a, 'b list) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_mapped :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'r) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key_exn :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list -> ('a, 'r) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val group :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             combine:('-> '-> 'b) ->
                             'r list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val sexp_of_key :
                            ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                          val clear : ('a, 'b) t_ -> unit
                          val copy : ('a, 'b) t_ -> ('a, 'b) t_
                          val invariant : ('a, 'b) t_ -> unit
                          val fold :
                            ('a, 'b) t_ ->
                            init:'->
                            f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                          val iter :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> unit) -> unit
                          val existsi :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val for_alli :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val length : ('a, 'b) t_ -> int
                          val is_empty : ('a, 'b) t_ -> bool
                          val mem : ('a, 'b) t_ -> 'a key_ -> bool
                          val remove : ('a, 'b) t_ -> 'a key_ -> unit
                          val remove_one :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val replace :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val set :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val add :
                            ('a, 'b) t_ ->
                            key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                          val add_exn :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val change :
                            ('a, 'b) t_ ->
                            'a key_ -> ('b option -> 'b option) -> unit
                          val add_multi :
                            ('a, 'b list) t_ ->
                            key:'a key_ -> data:'-> unit
                          val remove_multi :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val map :
                            ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_map :
                            ('c,
                             ('a, 'b) t_ ->
                             f:('-> 'c option) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c option) ->
                             ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter :
                            ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                          val filteri :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                          val partition_map :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:('-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_mapi :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:(key:'a key_ ->
                                 data:'-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_tf :
                            ('a, 'b) t_ ->
                            f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                          val partitioni_tf :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) ->
                            ('a, 'b) t_ * ('a, 'b) t_
                          val find_or_add :
                            ('a, 'b) t_ ->
                            'a key_ -> default:(unit -> 'b) -> 'b
                          val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                          val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                          val find_and_remove :
                            ('a, 'b) t_ -> 'a key_ -> 'b option
                          val iter_vals :
                            ('a, 'b) t_ -> f:('-> unit) -> unit
                          val merge :
                            ('c,
                             ('k, 'a) t_ ->
                             ('k, 'b) t_ ->
                             f:(key:'k key_ ->
                                [ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] -> 'c option) ->
                             ('k, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val merge_into :
                            f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                            src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                          val keys : ('a, 'b) t_ -> 'a key_ list
                          val data : ('a, 'b) t_ -> 'b list
                          val filter_inplace :
                            ('a, 'b) t_ -> f:('-> bool) -> unit
                          val filteri_inplace :
                            ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                          val equal :
                            ('a, 'b) t_ ->
                            ('a, 'b) t_ -> ('-> '-> bool) -> bool
                          val similar :
                            ('a, 'b1) t_ ->
                            ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                          val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                          val validate :
                            name:('a key_ -> string) ->
                            'Core_kernel.Validate.check ->
                            ('a, 'b) t_ Core_kernel.Validate.check
                          val incr :
                            ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Pooled_hashtbl :
                        sig
                          type key = t
                          type ('a, 'b) hashtbl =
                              ('a, 'b) Core_kernel.Pooled_hashtbl.t
                          type 'b t = (key, 'b) hashtbl
                          type ('a, 'b) t_ = 'b t
                          type 'a key_ = key
                          val hashable :
                            key Core_kernel.Core_hashtbl_intf.Hashable.t
                          val create :
                            ('a key_, 'b, unit -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_report_all_dups :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_or_error :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             ('a, 'b) t_ Core_kernel.Or_error.t)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_exn :
                            ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_multi :
                            ('a key_, 'b list,
                             ('a key_ * 'b) list -> ('a, 'b list) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_mapped :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'r) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key_exn :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list -> ('a, 'r) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val group :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             combine:('-> '-> 'b) ->
                             'r list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val sexp_of_key :
                            ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                          val clear : ('a, 'b) t_ -> unit
                          val copy : ('a, 'b) t_ -> ('a, 'b) t_
                          val invariant : ('a, 'b) t_ -> unit
                          val fold :
                            ('a, 'b) t_ ->
                            init:'->
                            f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                          val iter :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> unit) -> unit
                          val existsi :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val for_alli :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val length : ('a, 'b) t_ -> int
                          val is_empty : ('a, 'b) t_ -> bool
                          val mem : ('a, 'b) t_ -> 'a key_ -> bool
                          val remove : ('a, 'b) t_ -> 'a key_ -> unit
                          val remove_one :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val replace :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val set :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val add :
                            ('a, 'b) t_ ->
                            key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                          val add_exn :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val change :
                            ('a, 'b) t_ ->
                            'a key_ -> ('b option -> 'b option) -> unit
                          val add_multi :
                            ('a, 'b list) t_ ->
                            key:'a key_ -> data:'-> unit
                          val remove_multi :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val map :
                            ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_map :
                            ('c,
                             ('a, 'b) t_ ->
                             f:('-> 'c option) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c option) ->
                             ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter :
                            ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                          val filteri :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                          val partition_map :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:('-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_mapi :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:(key:'a key_ ->
                                 data:'-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_tf :
                            ('a, 'b) t_ ->
                            f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                          val partitioni_tf :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) ->
                            ('a, 'b) t_ * ('a, 'b) t_
                          val find_or_add :
                            ('a, 'b) t_ ->
                            'a key_ -> default:(unit -> 'b) -> 'b
                          val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                          val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                          val find_and_remove :
                            ('a, 'b) t_ -> 'a key_ -> 'b option
                          val iter_vals :
                            ('a, 'b) t_ -> f:('-> unit) -> unit
                          val merge :
                            ('c,
                             ('k, 'a) t_ ->
                             ('k, 'b) t_ ->
                             f:(key:'k key_ ->
                                [ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] -> 'c option) ->
                             ('k, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val merge_into :
                            f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                            src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                          val keys : ('a, 'b) t_ -> 'a key_ list
                          val data : ('a, 'b) t_ -> 'b list
                          val filter_inplace :
                            ('a, 'b) t_ -> f:('-> bool) -> unit
                          val filteri_inplace :
                            ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                          val equal :
                            ('a, 'b) t_ ->
                            ('a, 'b) t_ -> ('-> '-> bool) -> bool
                          val similar :
                            ('a, 'b1) t_ ->
                            ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                          val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                          val validate :
                            name:('a key_ -> string) ->
                            'Core_kernel.Validate.check ->
                            ('a, 'b) t_ Core_kernel.Validate.check
                          val incr :
                            ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Hash_set :
                        sig
                          type elt = t
                          type 'a hash_set = 'Core_kernel.Hash_set.t
                          type t = elt hash_set
                          type 'a t_ = t
                          type 'a elt_ = elt
                          val create :
                            ('a, unit -> 'a t_)
                            Core_kernel.Hash_set_intf.create_options_without_hashable
                          val of_list :
                            ('a, 'a elt_ list -> 'a t_)
                            Core_kernel.Hash_set_intf.create_options_without_hashable
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val bin_size_t : t Bin_prot.Size.sizer
                          val bin_write_t : t Bin_prot.Write.writer
                          val bin_read_t : t Bin_prot.Read.reader
                          val __bin_read_t__ :
                            (int -> t) Bin_prot.Read.reader
                          val bin_writer_t : t Bin_prot.Type_class.writer
                          val bin_reader_t : t Bin_prot.Type_class.reader
                          val bin_t : t Bin_prot.Type_class.t
                        end
                      module Hash_queue :
                        sig
                          module Key :
                            sig
                              type t = t
                              val hash : t -> int
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                              val compare : t -> t -> int
                            end
                          type 'a t = 'Block.Contents.Key.Hash_queue.t
                          val length : 'a t -> int
                          val is_empty : 'a t -> bool
                          val iter : 'a t -> f:('-> unit) -> unit
                          val fold :
                            'a t ->
                            init:'accum ->
                            f:('accum -> '-> 'accum) -> 'accum
                          val exists : 'a t -> f:('-> bool) -> bool
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val count : 'a t -> f:('-> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            'a t -> f:('-> 'sum) -> 'sum
                          val find : 'a t -> f:('-> bool) -> 'a option
                          val find_map :
                            'a t -> f:('-> 'b option) -> 'b option
                          val to_list : 'a t -> 'a list
                          val to_array : 'a t -> 'a array
                          val min_elt :
                            'a t -> cmp:('-> '-> int) -> 'a option
                          val max_elt :
                            'a t -> cmp:('-> '-> int) -> 'a option
                          val invariant : 'a t -> unit
                          val create : unit -> 'a t
                          val clear : 'a t -> unit
                          val mem : 'a t -> Key.t -> bool
                          val lookup : 'a t -> Key.t -> 'a option
                          val lookup_exn : 'a t -> Key.t -> 'a
                          val enqueue :
                            'a t ->
                            Key.t -> '-> [ `Key_already_present | `Ok ]
                          val enqueue_exn : 'a t -> Key.t -> '-> unit
                          val first : 'a t -> 'a option
                          val keys : 'a t -> Key.t list
                          val dequeue : 'a t -> 'a option
                          val dequeue_exn : 'a t -> 'a
                          val dequeue_with_key : 'a t -> (Key.t * 'a) option
                          val dequeue_with_key_exn : 'a t -> Key.t * 'a
                          val dequeue_all : 'a t -> f:('-> unit) -> unit
                          val remove :
                            'a t -> Key.t -> [ `No_such_key | `Ok ]
                          val remove_exn : 'a t -> Key.t -> unit
                          val replace :
                            'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                          val replace_exn : 'a t -> Key.t -> '-> unit
                          val iteri :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val foldi :
                            'a t ->
                            init:'->
                            f:('-> key:Key.t -> data:'-> 'b) -> 'b
                        end
                      val pp : Format.formatter -> t -> unit
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val bin_t : t Bin_prot.Type_class.t
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val of_json : Ezjsonm.t -> t
                      val to_json : t -> Ezjsonm.t
                      val of_raw : string -> t
                      val to_raw : t -> string
                      val of_bytes : Core_kernel.Std.Bigstring.t -> t
                      val of_bytes' : string -> t
                    end
                  module Value :
                    sig
                      type t = value
                      val of_string : string -> t
                      val to_string : t -> string
                      val ( >= ) : t -> t -> bool
                      val ( <= ) : t -> t -> bool
                      val ( = ) : t -> t -> bool
                      val ( > ) : t -> t -> bool
                      val ( < ) : t -> t -> bool
                      val ( <> ) : t -> t -> bool
                      val equal : t -> t -> bool
                      val compare : t -> t -> int
                      val min : t -> t -> t
                      val max : t -> t -> t
                      val ascending : t -> t -> int
                      val descending : t -> t -> int
                      val between : t -> low:t -> high:t -> bool
                      module Replace_polymorphic_compare :
                        sig
                          val ( >= ) : t -> t -> bool
                          val ( <= ) : t -> t -> bool
                          val ( = ) : t -> t -> bool
                          val ( > ) : t -> t -> bool
                          val ( < ) : t -> t -> bool
                          val ( <> ) : t -> t -> bool
                          val equal : t -> t -> bool
                          val compare : t -> t -> int
                          val min : t -> t -> t
                          val max : t -> t -> t
                          val _squelch_unused_module_warning_ : unit
                        end
                      type comparator_witness =
                          Block.Contents.Value.comparator_witness
                      val validate_lbound :
                        min:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val validate_ubound :
                        max:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val validate_bound :
                        min:t Core_kernel.Comparable_intf.bound ->
                        max:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                      module Map :
                        sig
                          module Key :
                            sig
                              type t = t
                              type comparator_witness = comparator_witness
                              val comparator :
                                (t, comparator_witness)
                                Core_kernel.Comparator.comparator
                            end
                          module Tree :
                            sig
                              type 'a t =
                                  (Key.t, 'a, Key.comparator_witness)
                                  Core_kernel.Core_map.Tree.t
                              val empty : 'a t
                              val singleton : Key.t -> '-> 'a t
                              val of_alist :
                                (Key.t * 'a) list ->
                                [ `Duplicate_key of Key.t | `Ok of 'a t ]
                              val of_alist_or_error :
                                (Key.t * 'a) list ->
                                'a t Core_kernel.Or_error.t
                              val of_alist_exn : (Key.t * 'a) list -> 'a t
                              val of_alist_multi :
                                (Key.t * 'a) list -> 'a list t
                              val of_alist_fold :
                                (Key.t * 'a) list ->
                                init:'-> f:('-> '-> 'b) -> 'b t
                              val of_alist_reduce :
                                (Key.t * 'a) list ->
                                f:('-> '-> 'a) -> 'a t
                              val of_sorted_array :
                                (Key.t * 'a) array ->
                                'a t Core_kernel.Or_error.t
                              val of_sorted_array_unchecked :
                                (Key.t * 'a) array -> 'a t
                              val of_tree : 'a t -> 'a t
                              val invariants : 'a t -> bool
                              val is_empty : 'a t -> bool
                              val length : 'a t -> int
                              val add : 'a t -> key:Key.t -> data:'-> 'a t
                              val add_multi :
                                'a list t ->
                                key:Key.t -> data:'-> 'a list t
                              val change :
                                'a t ->
                                Key.t -> ('a option -> 'a option) -> 'a t
                              val find : 'a t -> Key.t -> 'a option
                              val find_exn : 'a t -> Key.t -> 'a
                              val remove : 'a t -> Key.t -> 'a t
                              val mem : 'a t -> Key.t -> bool
                              val iter :
                                'a t ->
                                f:(key:Key.t -> data:'-> unit) -> unit
                              val iter2 :
                                'a t ->
                                'b t ->
                                f:(key:Key.t ->
                                   data:[ `Both of 'a * 'b
                                        | `Left of 'a
                                        | `Right of 'b ] ->
                                   unit) ->
                                unit
                              val map : 'a t -> f:('-> 'b) -> 'b t
                              val mapi :
                                'a t ->
                                f:(key:Key.t -> data:'-> 'b) -> 'b t
                              val fold :
                                'a t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val fold_right :
                                'a t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val filter :
                                'a t ->
                                f:(key:Key.t -> data:'-> bool) -> 'a t
                              val filter_map :
                                'a t -> f:('-> 'b option) -> 'b t
                              val filter_mapi :
                                'a t ->
                                f:(key:Key.t -> data:'-> 'b option) -> 'b t
                              val compare_direct :
                                ('-> '-> int) -> 'a t -> 'a t -> int
                              val equal :
                                ('-> '-> bool) -> 'a t -> 'a t -> bool
                              val keys : 'a t -> Key.t list
                              val data : 'a t -> 'a list
                              val to_alist : 'a t -> (Key.t * 'a) list
                              val validate :
                                name:(Key.t -> string) ->
                                'Core_kernel.Validate.check ->
                                'a t Core_kernel.Validate.check
                              val merge :
                                'a t ->
                                'b t ->
                                f:(key:Key.t ->
                                   [ `Both of 'a * 'b
                                   | `Left of 'a
                                   | `Right of 'b ] -> 'c option) ->
                                'c t
                              val symmetric_diff :
                                'a t ->
                                'a t ->
                                data_equal:('-> '-> bool) ->
                                (Key.t *
                                 [ `Left of 'a
                                 | `Right of 'a
                                 | `Unequal of 'a * 'a ])
                                Core_kernel.Sequence.t
                              val min_elt : 'a t -> (Key.t * 'a) option
                              val min_elt_exn : 'a t -> Key.t * 'a
                              val max_elt : 'a t -> (Key.t * 'a) option
                              val max_elt_exn : 'a t -> Key.t * 'a
                              val for_all : 'a t -> f:('-> bool) -> bool
                              val exists : 'a t -> f:('-> bool) -> bool
                              val fold_range_inclusive :
                                'a t ->
                                min:Key.t ->
                                max:Key.t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val range_to_alist :
                                'a t ->
                                min:Key.t -> max:Key.t -> (Key.t * 'a) list
                              val prev_key :
                                'a t -> Key.t -> (Key.t * 'a) option
                              val next_key :
                                'a t -> Key.t -> (Key.t * 'a) option
                              val rank : 'a t -> Key.t -> int option
                              val to_tree : 'a t -> 'a t
                              val to_sequence :
                                ?keys_in:[ `Decreasing_order
                                         | `Decreasing_order_less_than_or_equal_to of
                                             Key.t
                                         | `Increasing_order
                                         | `Increasing_order_greater_than_or_equal_to of
                                             Key.t ] ->
                                'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                              val t_of_sexp :
                                (Sexplib.Sexp.t -> 'a) ->
                                Sexplib.Sexp.t -> 'a t
                              val sexp_of_t :
                                ('-> Sexplib.Sexp.t) ->
                                'a t -> Sexplib.Sexp.t
                            end
                          type 'a t =
                              (Key.t, 'a, Key.comparator_witness)
                              Core_kernel.Core_map.t
                          val empty : 'a t
                          val singleton : Key.t -> '-> 'a t
                          val of_alist :
                            (Key.t * 'a) list ->
                            [ `Duplicate_key of Key.t | `Ok of 'a t ]
                          val of_alist_or_error :
                            (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                          val of_alist_exn : (Key.t * 'a) list -> 'a t
                          val of_alist_multi : (Key.t * 'a) list -> 'a list t
                          val of_alist_fold :
                            (Key.t * 'a) list ->
                            init:'-> f:('-> '-> 'b) -> 'b t
                          val of_alist_reduce :
                            (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                          val of_sorted_array :
                            (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked :
                            (Key.t * 'a) array -> 'a t
                          val of_tree : 'Tree.t -> 'a t
                          val invariants : 'a t -> bool
                          val is_empty : 'a t -> bool
                          val length : 'a t -> int
                          val add : 'a t -> key:Key.t -> data:'-> 'a t
                          val add_multi :
                            'a list t -> key:Key.t -> data:'-> 'a list t
                          val change :
                            'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                          val find : 'a t -> Key.t -> 'a option
                          val find_exn : 'a t -> Key.t -> 'a
                          val remove : 'a t -> Key.t -> 'a t
                          val mem : 'a t -> Key.t -> bool
                          val iter :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val iter2 :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               data:[ `Both of 'a * 'b
                                    | `Left of 'a
                                    | `Right of 'b ] ->
                               unit) ->
                            unit
                          val map : 'a t -> f:('-> 'b) -> 'b t
                          val mapi :
                            'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                          val fold :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val fold_right :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val filter :
                            'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                          val filter_map :
                            'a t -> f:('-> 'b option) -> 'b t
                          val filter_mapi :
                            'a t ->
                            f:(key:Key.t -> data:'-> 'b option) -> 'b t
                          val compare_direct :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val equal :
                            ('-> '-> bool) -> 'a t -> 'a t -> bool
                          val keys : 'a t -> Key.t list
                          val data : 'a t -> 'a list
                          val to_alist : 'a t -> (Key.t * 'a) list
                          val validate :
                            name:(Key.t -> string) ->
                            'Core_kernel.Validate.check ->
                            'a t Core_kernel.Validate.check
                          val merge :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            'c t
                          val symmetric_diff :
                            'a t ->
                            'a t ->
                            data_equal:('-> '-> bool) ->
                            (Key.t *
                             [ `Left of 'a
                             | `Right of 'a
                             | `Unequal of 'a * 'a ])
                            Core_kernel.Sequence.t
                          val min_elt : 'a t -> (Key.t * 'a) option
                          val min_elt_exn : 'a t -> Key.t * 'a
                          val max_elt : 'a t -> (Key.t * 'a) option
                          val max_elt_exn : 'a t -> Key.t * 'a
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val exists : 'a t -> f:('-> bool) -> bool
                          val fold_range_inclusive :
                            'a t ->
                            min:Key.t ->
                            max:Key.t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val range_to_alist :
                            'a t ->
                            min:Key.t -> max:Key.t -> (Key.t * 'a) list
                          val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val rank : 'a t -> Key.t -> int option
                          val to_tree : 'a t -> 'Tree.t
                          val to_sequence :
                            ?keys_in:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Key.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Key.t ] ->
                            'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                          val compare :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Set :
                        sig
                          module Elt :
                            sig
                              type t = t
                              type comparator_witness = comparator_witness
                              val comparator :
                                (t, comparator_witness)
                                Core_kernel.Comparator.comparator
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                            end
                          module Tree :
                            sig
                              type t =
                                  (Elt.t, Elt.comparator_witness)
                                  Core_kernel.Core_set.Tree.t
                              val length : t -> int
                              val is_empty : t -> bool
                              val iter : t -> f:(Elt.t -> unit) -> unit
                              val fold :
                                t ->
                                init:'accum ->
                                f:('accum -> Elt.t -> 'accum) -> 'accum
                              val exists : t -> f:(Elt.t -> bool) -> bool
                              val for_all : t -> f:(Elt.t -> bool) -> bool
                              val count : t -> f:(Elt.t -> bool) -> int
                              val sum :
                                (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                                t -> f:(Elt.t -> 'sum) -> 'sum
                              val find :
                                t -> f:(Elt.t -> bool) -> Elt.t option
                              val find_map :
                                t -> f:(Elt.t -> 'a option) -> 'a option
                              val to_list : t -> Elt.t list
                              val to_array : t -> Elt.t array
                              val invariants : t -> bool
                              val mem : t -> Elt.t -> bool
                              val add : t -> Elt.t -> t
                              val remove : t -> Elt.t -> t
                              val union : t -> t -> t
                              val inter : t -> t -> t
                              val diff : t -> t -> t
                              val compare_direct : t -> t -> int
                              val equal : t -> t -> bool
                              val subset : t -> t -> bool
                              val fold_until :
                                t ->
                                init:'->
                                f:('->
                                   Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                                'b
                              val fold_right :
                                t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                              val iter2 :
                                t ->
                                t ->
                                f:([ `Both of Elt.t * Elt.t
                                   | `Left of Elt.t
                                   | `Right of Elt.t ] -> unit) ->
                                unit
                              val filter : t -> f:(Elt.t -> bool) -> t
                              val partition_tf :
                                t -> f:(Elt.t -> bool) -> t * t
                              val elements : t -> Elt.t list
                              val min_elt : t -> Elt.t option
                              val min_elt_exn : t -> Elt.t
                              val max_elt : t -> Elt.t option
                              val max_elt_exn : t -> Elt.t
                              val choose : t -> Elt.t option
                              val choose_exn : t -> Elt.t
                              val split : t -> Elt.t -> t * bool * t
                              val group_by :
                                t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                              val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                              val find_index : t -> int -> Elt.t option
                              val remove_index : t -> int -> t
                              val to_tree : t -> t
                              val to_sequence :
                                ?in_:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Elt.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Elt.t ] ->
                                t -> Elt.t Core_kernel.Sequence.t
                              val to_map :
                                t ->
                                f:(Elt.t -> 'data) ->
                                (Elt.t, 'data, Elt.comparator_witness)
                                Core_kernel.Core_set_intf.Map.t
                              val empty : t
                              val singleton : Elt.t -> t
                              val union_list : t list -> t
                              val of_list : Elt.t list -> t
                              val of_array : Elt.t array -> t
                              val of_sorted_array :
                                Elt.t array -> t Core_kernel.Or_error.t
                              val of_sorted_array_unchecked :
                                Elt.t array -> t
                              val stable_dedup_list :
                                Elt.t list -> Elt.t list
                              val map :
                                ('a, 'b) Core_kernel.Core_set.Tree.t ->
                                f:('-> Elt.t) -> t
                              val filter_map :
                                ('a, 'b) Core_kernel.Core_set.Tree.t ->
                                f:('-> Elt.t option) -> t
                              val of_tree : t -> t
                              val of_map_keys :
                                (Elt.t, 'a, Elt.comparator_witness)
                                Core_kernel.Core_set_intf.Map.t -> t
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                              val compare : t -> t -> int
                            end
                          type t =
                              (Elt.t, Elt.comparator_witness)
                              Core_kernel.Core_set.t
                          val length : t -> int
                          val is_empty : t -> bool
                          val iter : t -> f:(Elt.t -> unit) -> unit
                          val fold :
                            t ->
                            init:'accum ->
                            f:('accum -> Elt.t -> 'accum) -> 'accum
                          val exists : t -> f:(Elt.t -> bool) -> bool
                          val for_all : t -> f:(Elt.t -> bool) -> bool
                          val count : t -> f:(Elt.t -> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            t -> f:(Elt.t -> 'sum) -> 'sum
                          val find : t -> f:(Elt.t -> bool) -> Elt.t option
                          val find_map :
                            t -> f:(Elt.t -> 'a option) -> 'a option
                          val to_list : t -> Elt.t list
                          val to_array : t -> Elt.t array
                          val invariants : t -> bool
                          val mem : t -> Elt.t -> bool
                          val add : t -> Elt.t -> t
                          val remove : t -> Elt.t -> t
                          val union : t -> t -> t
                          val inter : t -> t -> t
                          val diff : t -> t -> t
                          val compare_direct : t -> t -> int
                          val equal : t -> t -> bool
                          val subset : t -> t -> bool
                          val fold_until :
                            t ->
                            init:'->
                            f:('->
                               Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                            'b
                          val fold_right :
                            t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                          val iter2 :
                            t ->
                            t ->
                            f:([ `Both of Elt.t * Elt.t
                               | `Left of Elt.t
                               | `Right of Elt.t ] -> unit) ->
                            unit
                          val filter : t -> f:(Elt.t -> bool) -> t
                          val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                          val elements : t -> Elt.t list
                          val min_elt : t -> Elt.t option
                          val min_elt_exn : t -> Elt.t
                          val max_elt : t -> Elt.t option
                          val max_elt_exn : t -> Elt.t
                          val choose : t -> Elt.t option
                          val choose_exn : t -> Elt.t
                          val split : t -> Elt.t -> t * bool * t
                          val group_by :
                            t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                          val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                          val find_index : t -> int -> Elt.t option
                          val remove_index : t -> int -> t
                          val to_tree : t -> Tree.t
                          val to_sequence :
                            ?in_:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Elt.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Elt.t ] ->
                            t -> Elt.t Core_kernel.Sequence.t
                          val to_map :
                            t ->
                            f:(Elt.t -> 'data) ->
                            (Elt.t, 'data, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t
                          val empty : t
                          val singleton : Elt.t -> t
                          val union_list : t list -> t
                          val of_list : Elt.t list -> t
                          val of_array : Elt.t array -> t
                          val of_sorted_array :
                            Elt.t array -> t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked : Elt.t array -> t
                          val stable_dedup_list : Elt.t list -> Elt.t list
                          val map :
                            ('a, 'b) Core_kernel.Core_set.t ->
                            f:('-> Elt.t) -> t
                          val filter_map :
                            ('a, 'b) Core_kernel.Core_set.t ->
                            f:('-> Elt.t option) -> t
                          val of_tree : Tree.t -> t
                          val of_map_keys :
                            (Elt.t, 'a, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t -> t
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                          val bin_size_t : t Bin_prot.Size.sizer
                          val bin_write_t : t Bin_prot.Write.writer
                          val bin_read_t : t Bin_prot.Read.reader
                          val __bin_read_t__ :
                            (int -> t) Bin_prot.Read.reader
                          val bin_writer_t : t Bin_prot.Type_class.writer
                          val bin_reader_t : t Bin_prot.Type_class.reader
                          val bin_t : t Bin_prot.Type_class.t
                        end
                      module Hashable : sig type t = t end
                      val hash : t -> int
                      val hashable :
                        t Core_kernel.Hashable.Hashtbl.Hashable.t
                      module Table :
                        sig
                          type key = t
                          type ('a, 'b) hashtbl =
                              ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                          type 'b t = (key, 'b) hashtbl
                          type ('a, 'b) t_ = 'b t
                          type 'a key_ = key
                          val hashable :
                            key Core_kernel.Core_hashtbl_intf.Hashable.t
                          val create :
                            ('a key_, 'b, unit -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_report_all_dups :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_or_error :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             ('a, 'b) t_ Core_kernel.Or_error.t)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_exn :
                            ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_multi :
                            ('a key_, 'b list,
                             ('a key_ * 'b) list -> ('a, 'b list) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_mapped :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'r) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key_exn :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list -> ('a, 'r) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val group :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             combine:('-> '-> 'b) ->
                             'r list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val sexp_of_key :
                            ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                          val clear : ('a, 'b) t_ -> unit
                          val copy : ('a, 'b) t_ -> ('a, 'b) t_
                          val invariant : ('a, 'b) t_ -> unit
                          val fold :
                            ('a, 'b) t_ ->
                            init:'->
                            f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                          val iter :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> unit) -> unit
                          val existsi :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val for_alli :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val length : ('a, 'b) t_ -> int
                          val is_empty : ('a, 'b) t_ -> bool
                          val mem : ('a, 'b) t_ -> 'a key_ -> bool
                          val remove : ('a, 'b) t_ -> 'a key_ -> unit
                          val remove_one :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val replace :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val set :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val add :
                            ('a, 'b) t_ ->
                            key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                          val add_exn :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val change :
                            ('a, 'b) t_ ->
                            'a key_ -> ('b option -> 'b option) -> unit
                          val add_multi :
                            ('a, 'b list) t_ ->
                            key:'a key_ -> data:'-> unit
                          val remove_multi :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val map :
                            ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_map :
                            ('c,
                             ('a, 'b) t_ ->
                             f:('-> 'c option) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c option) ->
                             ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter :
                            ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                          val filteri :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                          val partition_map :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:('-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_mapi :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:(key:'a key_ ->
                                 data:'-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_tf :
                            ('a, 'b) t_ ->
                            f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                          val partitioni_tf :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) ->
                            ('a, 'b) t_ * ('a, 'b) t_
                          val find_or_add :
                            ('a, 'b) t_ ->
                            'a key_ -> default:(unit -> 'b) -> 'b
                          val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                          val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                          val find_and_remove :
                            ('a, 'b) t_ -> 'a key_ -> 'b option
                          val iter_vals :
                            ('a, 'b) t_ -> f:('-> unit) -> unit
                          val merge :
                            ('c,
                             ('k, 'a) t_ ->
                             ('k, 'b) t_ ->
                             f:(key:'k key_ ->
                                [ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] -> 'c option) ->
                             ('k, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val merge_into :
                            f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                            src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                          val keys : ('a, 'b) t_ -> 'a key_ list
                          val data : ('a, 'b) t_ -> 'b list
                          val filter_inplace :
                            ('a, 'b) t_ -> f:('-> bool) -> unit
                          val filteri_inplace :
                            ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                          val equal :
                            ('a, 'b) t_ ->
                            ('a, 'b) t_ -> ('-> '-> bool) -> bool
                          val similar :
                            ('a, 'b1) t_ ->
                            ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                          val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                          val validate :
                            name:('a key_ -> string) ->
                            'Core_kernel.Validate.check ->
                            ('a, 'b) t_ Core_kernel.Validate.check
                          val incr :
                            ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Pooled_hashtbl :
                        sig
                          type key = t
                          type ('a, 'b) hashtbl =
                              ('a, 'b) Core_kernel.Pooled_hashtbl.t
                          type 'b t = (key, 'b) hashtbl
                          type ('a, 'b) t_ = 'b t
                          type 'a key_ = key
                          val hashable :
                            key Core_kernel.Core_hashtbl_intf.Hashable.t
                          val create :
                            ('a key_, 'b, unit -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_report_all_dups :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_or_error :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             ('a, 'b) t_ Core_kernel.Or_error.t)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_exn :
                            ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_multi :
                            ('a key_, 'b list,
                             ('a key_ * 'b) list -> ('a, 'b list) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_mapped :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'r) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key_exn :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list -> ('a, 'r) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val group :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             combine:('-> '-> 'b) ->
                             'r list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val sexp_of_key :
                            ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                          val clear : ('a, 'b) t_ -> unit
                          val copy : ('a, 'b) t_ -> ('a, 'b) t_
                          val invariant : ('a, 'b) t_ -> unit
                          val fold :
                            ('a, 'b) t_ ->
                            init:'->
                            f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                          val iter :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> unit) -> unit
                          val existsi :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val for_alli :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val length : ('a, 'b) t_ -> int
                          val is_empty : ('a, 'b) t_ -> bool
                          val mem : ('a, 'b) t_ -> 'a key_ -> bool
                          val remove : ('a, 'b) t_ -> 'a key_ -> unit
                          val remove_one :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val replace :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val set :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val add :
                            ('a, 'b) t_ ->
                            key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                          val add_exn :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val change :
                            ('a, 'b) t_ ->
                            'a key_ -> ('b option -> 'b option) -> unit
                          val add_multi :
                            ('a, 'b list) t_ ->
                            key:'a key_ -> data:'-> unit
                          val remove_multi :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val map :
                            ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_map :
                            ('c,
                             ('a, 'b) t_ ->
                             f:('-> 'c option) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c option) ->
                             ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter :
                            ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                          val filteri :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                          val partition_map :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:('-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_mapi :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:(key:'a key_ ->
                                 data:'-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_tf :
                            ('a, 'b) t_ ->
                            f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                          val partitioni_tf :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) ->
                            ('a, 'b) t_ * ('a, 'b) t_
                          val find_or_add :
                            ('a, 'b) t_ ->
                            'a key_ -> default:(unit -> 'b) -> 'b
                          val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                          val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                          val find_and_remove :
                            ('a, 'b) t_ -> 'a key_ -> 'b option
                          val iter_vals :
                            ('a, 'b) t_ -> f:('-> unit) -> unit
                          val merge :
                            ('c,
                             ('k, 'a) t_ ->
                             ('k, 'b) t_ ->
                             f:(key:'k key_ ->
                                [ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] -> 'c option) ->
                             ('k, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val merge_into :
                            f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                            src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                          val keys : ('a, 'b) t_ -> 'a key_ list
                          val data : ('a, 'b) t_ -> 'b list
                          val filter_inplace :
                            ('a, 'b) t_ -> f:('-> bool) -> unit
                          val filteri_inplace :
                            ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                          val equal :
                            ('a, 'b) t_ ->
                            ('a, 'b) t_ -> ('-> '-> bool) -> bool
                          val similar :
                            ('a, 'b1) t_ ->
                            ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                          val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                          val validate :
                            name:('a key_ -> string) ->
                            'Core_kernel.Validate.check ->
                            ('a, 'b) t_ Core_kernel.Validate.check
                          val incr :
                            ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Hash_set :
                        sig
                          type elt = t
                          type 'a hash_set = 'Core_kernel.Hash_set.t
                          type t = elt hash_set
                          type 'a t_ = t
                          type 'a elt_ = elt
                          val create :
                            ('a, unit -> 'a t_)
                            Core_kernel.Hash_set_intf.create_options_without_hashable
                          val of_list :
                            ('a, 'a elt_ list -> 'a t_)
                            Core_kernel.Hash_set_intf.create_options_without_hashable
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val bin_size_t : t Bin_prot.Size.sizer
                          val bin_write_t : t Bin_prot.Write.writer
                          val bin_read_t : t Bin_prot.Read.reader
                          val __bin_read_t__ :
                            (int -> t) Bin_prot.Read.reader
                          val bin_writer_t : t Bin_prot.Type_class.writer
                          val bin_reader_t : t Bin_prot.Type_class.reader
                          val bin_t : t Bin_prot.Type_class.t
                        end
                      module Hash_queue :
                        sig
                          module Key :
                            sig
                              type t = t
                              val hash : t -> int
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                              val compare : t -> t -> int
                            end
                          type 'a t = 'Block.Contents.Value.Hash_queue.t
                          val length : 'a t -> int
                          val is_empty : 'a t -> bool
                          val iter : 'a t -> f:('-> unit) -> unit
                          val fold :
                            'a t ->
                            init:'accum ->
                            f:('accum -> '-> 'accum) -> 'accum
                          val exists : 'a t -> f:('-> bool) -> bool
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val count : 'a t -> f:('-> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            'a t -> f:('-> 'sum) -> 'sum
                          val find : 'a t -> f:('-> bool) -> 'a option
                          val find_map :
                            'a t -> f:('-> 'b option) -> 'b option
                          val to_list : 'a t -> 'a list
                          val to_array : 'a t -> 'a array
                          val min_elt :
                            'a t -> cmp:('-> '-> int) -> 'a option
                          val max_elt :
                            'a t -> cmp:('-> '-> int) -> 'a option
                          val invariant : 'a t -> unit
                          val create : unit -> 'a t
                          val clear : 'a t -> unit
                          val mem : 'a t -> Key.t -> bool
                          val lookup : 'a t -> Key.t -> 'a option
                          val lookup_exn : 'a t -> Key.t -> 'a
                          val enqueue :
                            'a t ->
                            Key.t -> '-> [ `Key_already_present | `Ok ]
                          val enqueue_exn : 'a t -> Key.t -> '-> unit
                          val first : 'a t -> 'a option
                          val keys : 'a t -> Key.t list
                          val dequeue : 'a t -> 'a option
                          val dequeue_exn : 'a t -> 'a
                          val dequeue_with_key : 'a t -> (Key.t * 'a) option
                          val dequeue_with_key_exn : 'a t -> Key.t * 'a
                          val dequeue_all : 'a t -> f:('-> unit) -> unit
                          val remove :
                            'a t -> Key.t -> [ `No_such_key | `Ok ]
                          val remove_exn : 'a t -> Key.t -> unit
                          val replace :
                            'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                          val replace_exn : 'a t -> Key.t -> '-> unit
                          val iteri :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val foldi :
                            'a t ->
                            init:'->
                            f:('-> key:Key.t -> data:'-> 'b) -> 'b
                        end
                      val pp : Format.formatter -> t -> unit
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val bin_t : t Bin_prot.Type_class.t
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val of_json : Ezjsonm.t -> t
                      val to_json : t -> Ezjsonm.t
                      val merge : t IrminMerge.t
                    end
                end
              module Node :
                sig
                  type key = key
                  type value = key IrminNode.t
                  type t = Block.Node.t
                  val create : unit -> t Lwt.t
                  val read : t -> key -> value option Lwt.t
                  val read_exn : t -> key -> value Lwt.t
                  val mem : t -> key -> bool Lwt.t
                  val list : t -> key list -> key list Lwt.t
                  val dump : t -> (key * value) list Lwt.t
                  val add : t -> value -> key Lwt.t
                  type contents = contents
                  type path = IrminPath.t
                  val node :
                    t ->
                    ?contents:contents ->
                    ?succ:(string * value) list ->
                    unit -> (key * value) Lwt.t
                  val contents : t -> value -> contents Lwt.t option
                  val succ :
                    t -> value -> value Lwt.t Core_kernel.Std.String.Map.t
                  val sub : t -> value -> path -> value option Lwt.t
                  val sub_exn : t -> value -> path -> value Lwt.t
                  val map :
                    t -> value -> path -> (value -> value) -> value Lwt.t
                  val update : t -> value -> path -> contents -> value Lwt.t
                  val find : t -> value -> path -> contents option Lwt.t
                  val find_exn : t -> value -> path -> contents Lwt.t
                  val remove : t -> value -> path -> value Lwt.t
                  val valid : t -> value -> path -> bool Lwt.t
                  val merge : t -> key IrminMerge.t
                  module Key :
                    sig
                      type t = key
                      val of_string : string -> t
                      val to_string : t -> string
                      val ( >= ) : t -> t -> bool
                      val ( <= ) : t -> t -> bool
                      val ( = ) : t -> t -> bool
                      val ( > ) : t -> t -> bool
                      val ( < ) : t -> t -> bool
                      val ( <> ) : t -> t -> bool
                      val equal : t -> t -> bool
                      val compare : t -> t -> int
                      val min : t -> t -> t
                      val max : t -> t -> t
                      val ascending : t -> t -> int
                      val descending : t -> t -> int
                      val between : t -> low:t -> high:t -> bool
                      module Replace_polymorphic_compare :
                        sig
                          val ( >= ) : t -> t -> bool
                          val ( <= ) : t -> t -> bool
                          val ( = ) : t -> t -> bool
                          val ( > ) : t -> t -> bool
                          val ( < ) : t -> t -> bool
                          val ( <> ) : t -> t -> bool
                          val equal : t -> t -> bool
                          val compare : t -> t -> int
                          val min : t -> t -> t
                          val max : t -> t -> t
                          val _squelch_unused_module_warning_ : unit
                        end
                      type comparator_witness =
                          Block.Node.Key.comparator_witness
                      val validate_lbound :
                        min:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val validate_ubound :
                        max:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val validate_bound :
                        min:t Core_kernel.Comparable_intf.bound ->
                        max:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                      module Map :
                        sig
                          module Key :
                            sig
                              type t = t
                              type comparator_witness = comparator_witness
                              val comparator :
                                (t, comparator_witness)
                                Core_kernel.Comparator.comparator
                            end
                          module Tree :
                            sig
                              type 'a t =
                                  (Key.t, 'a, Key.comparator_witness)
                                  Core_kernel.Core_map.Tree.t
                              val empty : 'a t
                              val singleton : Key.t -> '-> 'a t
                              val of_alist :
                                (Key.t * 'a) list ->
                                [ `Duplicate_key of Key.t | `Ok of 'a t ]
                              val of_alist_or_error :
                                (Key.t * 'a) list ->
                                'a t Core_kernel.Or_error.t
                              val of_alist_exn : (Key.t * 'a) list -> 'a t
                              val of_alist_multi :
                                (Key.t * 'a) list -> 'a list t
                              val of_alist_fold :
                                (Key.t * 'a) list ->
                                init:'-> f:('-> '-> 'b) -> 'b t
                              val of_alist_reduce :
                                (Key.t * 'a) list ->
                                f:('-> '-> 'a) -> 'a t
                              val of_sorted_array :
                                (Key.t * 'a) array ->
                                'a t Core_kernel.Or_error.t
                              val of_sorted_array_unchecked :
                                (Key.t * 'a) array -> 'a t
                              val of_tree : 'a t -> 'a t
                              val invariants : 'a t -> bool
                              val is_empty : 'a t -> bool
                              val length : 'a t -> int
                              val add : 'a t -> key:Key.t -> data:'-> 'a t
                              val add_multi :
                                'a list t ->
                                key:Key.t -> data:'-> 'a list t
                              val change :
                                'a t ->
                                Key.t -> ('a option -> 'a option) -> 'a t
                              val find : 'a t -> Key.t -> 'a option
                              val find_exn : 'a t -> Key.t -> 'a
                              val remove : 'a t -> Key.t -> 'a t
                              val mem : 'a t -> Key.t -> bool
                              val iter :
                                'a t ->
                                f:(key:Key.t -> data:'-> unit) -> unit
                              val iter2 :
                                'a t ->
                                'b t ->
                                f:(key:Key.t ->
                                   data:[ `Both of 'a * 'b
                                        | `Left of 'a
                                        | `Right of 'b ] ->
                                   unit) ->
                                unit
                              val map : 'a t -> f:('-> 'b) -> 'b t
                              val mapi :
                                'a t ->
                                f:(key:Key.t -> data:'-> 'b) -> 'b t
                              val fold :
                                'a t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val fold_right :
                                'a t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val filter :
                                'a t ->
                                f:(key:Key.t -> data:'-> bool) -> 'a t
                              val filter_map :
                                'a t -> f:('-> 'b option) -> 'b t
                              val filter_mapi :
                                'a t ->
                                f:(key:Key.t -> data:'-> 'b option) -> 'b t
                              val compare_direct :
                                ('-> '-> int) -> 'a t -> 'a t -> int
                              val equal :
                                ('-> '-> bool) -> 'a t -> 'a t -> bool
                              val keys : 'a t -> Key.t list
                              val data : 'a t -> 'a list
                              val to_alist : 'a t -> (Key.t * 'a) list
                              val validate :
                                name:(Key.t -> string) ->
                                'Core_kernel.Validate.check ->
                                'a t Core_kernel.Validate.check
                              val merge :
                                'a t ->
                                'b t ->
                                f:(key:Key.t ->
                                   [ `Both of 'a * 'b
                                   | `Left of 'a
                                   | `Right of 'b ] -> 'c option) ->
                                'c t
                              val symmetric_diff :
                                'a t ->
                                'a t ->
                                data_equal:('-> '-> bool) ->
                                (Key.t *
                                 [ `Left of 'a
                                 | `Right of 'a
                                 | `Unequal of 'a * 'a ])
                                Core_kernel.Sequence.t
                              val min_elt : 'a t -> (Key.t * 'a) option
                              val min_elt_exn : 'a t -> Key.t * 'a
                              val max_elt : 'a t -> (Key.t * 'a) option
                              val max_elt_exn : 'a t -> Key.t * 'a
                              val for_all : 'a t -> f:('-> bool) -> bool
                              val exists : 'a t -> f:('-> bool) -> bool
                              val fold_range_inclusive :
                                'a t ->
                                min:Key.t ->
                                max:Key.t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val range_to_alist :
                                'a t ->
                                min:Key.t -> max:Key.t -> (Key.t * 'a) list
                              val prev_key :
                                'a t -> Key.t -> (Key.t * 'a) option
                              val next_key :
                                'a t -> Key.t -> (Key.t * 'a) option
                              val rank : 'a t -> Key.t -> int option
                              val to_tree : 'a t -> 'a t
                              val to_sequence :
                                ?keys_in:[ `Decreasing_order
                                         | `Decreasing_order_less_than_or_equal_to of
                                             Key.t
                                         | `Increasing_order
                                         | `Increasing_order_greater_than_or_equal_to of
                                             Key.t ] ->
                                'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                              val t_of_sexp :
                                (Sexplib.Sexp.t -> 'a) ->
                                Sexplib.Sexp.t -> 'a t
                              val sexp_of_t :
                                ('-> Sexplib.Sexp.t) ->
                                'a t -> Sexplib.Sexp.t
                            end
                          type 'a t =
                              (Key.t, 'a, Key.comparator_witness)
                              Core_kernel.Core_map.t
                          val empty : 'a t
                          val singleton : Key.t -> '-> 'a t
                          val of_alist :
                            (Key.t * 'a) list ->
                            [ `Duplicate_key of Key.t | `Ok of 'a t ]
                          val of_alist_or_error :
                            (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                          val of_alist_exn : (Key.t * 'a) list -> 'a t
                          val of_alist_multi : (Key.t * 'a) list -> 'a list t
                          val of_alist_fold :
                            (Key.t * 'a) list ->
                            init:'-> f:('-> '-> 'b) -> 'b t
                          val of_alist_reduce :
                            (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                          val of_sorted_array :
                            (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked :
                            (Key.t * 'a) array -> 'a t
                          val of_tree : 'Tree.t -> 'a t
                          val invariants : 'a t -> bool
                          val is_empty : 'a t -> bool
                          val length : 'a t -> int
                          val add : 'a t -> key:Key.t -> data:'-> 'a t
                          val add_multi :
                            'a list t -> key:Key.t -> data:'-> 'a list t
                          val change :
                            'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                          val find : 'a t -> Key.t -> 'a option
                          val find_exn : 'a t -> Key.t -> 'a
                          val remove : 'a t -> Key.t -> 'a t
                          val mem : 'a t -> Key.t -> bool
                          val iter :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val iter2 :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               data:[ `Both of 'a * 'b
                                    | `Left of 'a
                                    | `Right of 'b ] ->
                               unit) ->
                            unit
                          val map : 'a t -> f:('-> 'b) -> 'b t
                          val mapi :
                            'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                          val fold :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val fold_right :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val filter :
                            'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                          val filter_map :
                            'a t -> f:('-> 'b option) -> 'b t
                          val filter_mapi :
                            'a t ->
                            f:(key:Key.t -> data:'-> 'b option) -> 'b t
                          val compare_direct :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val equal :
                            ('-> '-> bool) -> 'a t -> 'a t -> bool
                          val keys : 'a t -> Key.t list
                          val data : 'a t -> 'a list
                          val to_alist : 'a t -> (Key.t * 'a) list
                          val validate :
                            name:(Key.t -> string) ->
                            'Core_kernel.Validate.check ->
                            'a t Core_kernel.Validate.check
                          val merge :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            'c t
                          val symmetric_diff :
                            'a t ->
                            'a t ->
                            data_equal:('-> '-> bool) ->
                            (Key.t *
                             [ `Left of 'a
                             | `Right of 'a
                             | `Unequal of 'a * 'a ])
                            Core_kernel.Sequence.t
                          val min_elt : 'a t -> (Key.t * 'a) option
                          val min_elt_exn : 'a t -> Key.t * 'a
                          val max_elt : 'a t -> (Key.t * 'a) option
                          val max_elt_exn : 'a t -> Key.t * 'a
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val exists : 'a t -> f:('-> bool) -> bool
                          val fold_range_inclusive :
                            'a t ->
                            min:Key.t ->
                            max:Key.t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val range_to_alist :
                            'a t ->
                            min:Key.t -> max:Key.t -> (Key.t * 'a) list
                          val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val rank : 'a t -> Key.t -> int option
                          val to_tree : 'a t -> 'Tree.t
                          val to_sequence :
                            ?keys_in:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Key.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Key.t ] ->
                            'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                          val compare :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Set :
                        sig
                          module Elt :
                            sig
                              type t = t
                              type comparator_witness = comparator_witness
                              val comparator :
                                (t, comparator_witness)
                                Core_kernel.Comparator.comparator
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                            end
                          module Tree :
                            sig
                              type t =
                                  (Elt.t, Elt.comparator_witness)
                                  Core_kernel.Core_set.Tree.t
                              val length : t -> int
                              val is_empty : t -> bool
                              val iter : t -> f:(Elt.t -> unit) -> unit
                              val fold :
                                t ->
                                init:'accum ->
                                f:('accum -> Elt.t -> 'accum) -> 'accum
                              val exists : t -> f:(Elt.t -> bool) -> bool
                              val for_all : t -> f:(Elt.t -> bool) -> bool
                              val count : t -> f:(Elt.t -> bool) -> int
                              val sum :
                                (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                                t -> f:(Elt.t -> 'sum) -> 'sum
                              val find :
                                t -> f:(Elt.t -> bool) -> Elt.t option
                              val find_map :
                                t -> f:(Elt.t -> 'a option) -> 'a option
                              val to_list : t -> Elt.t list
                              val to_array : t -> Elt.t array
                              val invariants : t -> bool
                              val mem : t -> Elt.t -> bool
                              val add : t -> Elt.t -> t
                              val remove : t -> Elt.t -> t
                              val union : t -> t -> t
                              val inter : t -> t -> t
                              val diff : t -> t -> t
                              val compare_direct : t -> t -> int
                              val equal : t -> t -> bool
                              val subset : t -> t -> bool
                              val fold_until :
                                t ->
                                init:'->
                                f:('->
                                   Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                                'b
                              val fold_right :
                                t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                              val iter2 :
                                t ->
                                t ->
                                f:([ `Both of Elt.t * Elt.t
                                   | `Left of Elt.t
                                   | `Right of Elt.t ] -> unit) ->
                                unit
                              val filter : t -> f:(Elt.t -> bool) -> t
                              val partition_tf :
                                t -> f:(Elt.t -> bool) -> t * t
                              val elements : t -> Elt.t list
                              val min_elt : t -> Elt.t option
                              val min_elt_exn : t -> Elt.t
                              val max_elt : t -> Elt.t option
                              val max_elt_exn : t -> Elt.t
                              val choose : t -> Elt.t option
                              val choose_exn : t -> Elt.t
                              val split : t -> Elt.t -> t * bool * t
                              val group_by :
                                t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                              val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                              val find_index : t -> int -> Elt.t option
                              val remove_index : t -> int -> t
                              val to_tree : t -> t
                              val to_sequence :
                                ?in_:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Elt.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Elt.t ] ->
                                t -> Elt.t Core_kernel.Sequence.t
                              val to_map :
                                t ->
                                f:(Elt.t -> 'data) ->
                                (Elt.t, 'data, Elt.comparator_witness)
                                Core_kernel.Core_set_intf.Map.t
                              val empty : t
                              val singleton : Elt.t -> t
                              val union_list : t list -> t
                              val of_list : Elt.t list -> t
                              val of_array : Elt.t array -> t
                              val of_sorted_array :
                                Elt.t array -> t Core_kernel.Or_error.t
                              val of_sorted_array_unchecked :
                                Elt.t array -> t
                              val stable_dedup_list :
                                Elt.t list -> Elt.t list
                              val map :
                                ('a, 'b) Core_kernel.Core_set.Tree.t ->
                                f:('-> Elt.t) -> t
                              val filter_map :
                                ('a, 'b) Core_kernel.Core_set.Tree.t ->
                                f:('-> Elt.t option) -> t
                              val of_tree : t -> t
                              val of_map_keys :
                                (Elt.t, 'a, Elt.comparator_witness)
                                Core_kernel.Core_set_intf.Map.t -> t
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                              val compare : t -> t -> int
                            end
                          type t =
                              (Elt.t, Elt.comparator_witness)
                              Core_kernel.Core_set.t
                          val length : t -> int
                          val is_empty : t -> bool
                          val iter : t -> f:(Elt.t -> unit) -> unit
                          val fold :
                            t ->
                            init:'accum ->
                            f:('accum -> Elt.t -> 'accum) -> 'accum
                          val exists : t -> f:(Elt.t -> bool) -> bool
                          val for_all : t -> f:(Elt.t -> bool) -> bool
                          val count : t -> f:(Elt.t -> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            t -> f:(Elt.t -> 'sum) -> 'sum
                          val find : t -> f:(Elt.t -> bool) -> Elt.t option
                          val find_map :
                            t -> f:(Elt.t -> 'a option) -> 'a option
                          val to_list : t -> Elt.t list
                          val to_array : t -> Elt.t array
                          val invariants : t -> bool
                          val mem : t -> Elt.t -> bool
                          val add : t -> Elt.t -> t
                          val remove : t -> Elt.t -> t
                          val union : t -> t -> t
                          val inter : t -> t -> t
                          val diff : t -> t -> t
                          val compare_direct : t -> t -> int
                          val equal : t -> t -> bool
                          val subset : t -> t -> bool
                          val fold_until :
                            t ->
                            init:'->
                            f:('->
                               Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                            'b
                          val fold_right :
                            t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                          val iter2 :
                            t ->
                            t ->
                            f:([ `Both of Elt.t * Elt.t
                               | `Left of Elt.t
                               | `Right of Elt.t ] -> unit) ->
                            unit
                          val filter : t -> f:(Elt.t -> bool) -> t
                          val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                          val elements : t -> Elt.t list
                          val min_elt : t -> Elt.t option
                          val min_elt_exn : t -> Elt.t
                          val max_elt : t -> Elt.t option
                          val max_elt_exn : t -> Elt.t
                          val choose : t -> Elt.t option
                          val choose_exn : t -> Elt.t
                          val split : t -> Elt.t -> t * bool * t
                          val group_by :
                            t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                          val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                          val find_index : t -> int -> Elt.t option
                          val remove_index : t -> int -> t
                          val to_tree : t -> Tree.t
                          val to_sequence :
                            ?in_:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Elt.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Elt.t ] ->
                            t -> Elt.t Core_kernel.Sequence.t
                          val to_map :
                            t ->
                            f:(Elt.t -> 'data) ->
                            (Elt.t, 'data, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t
                          val empty : t
                          val singleton : Elt.t -> t
                          val union_list : t list -> t
                          val of_list : Elt.t list -> t
                          val of_array : Elt.t array -> t
                          val of_sorted_array :
                            Elt.t array -> t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked : Elt.t array -> t
                          val stable_dedup_list : Elt.t list -> Elt.t list
                          val map :
                            ('a, 'b) Core_kernel.Core_set.t ->
                            f:('-> Elt.t) -> t
                          val filter_map :
                            ('a, 'b) Core_kernel.Core_set.t ->
                            f:('-> Elt.t option) -> t
                          val of_tree : Tree.t -> t
                          val of_map_keys :
                            (Elt.t, 'a, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t -> t
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                          val bin_size_t : t Bin_prot.Size.sizer
                          val bin_write_t : t Bin_prot.Write.writer
                          val bin_read_t : t Bin_prot.Read.reader
                          val __bin_read_t__ :
                            (int -> t) Bin_prot.Read.reader
                          val bin_writer_t : t Bin_prot.Type_class.writer
                          val bin_reader_t : t Bin_prot.Type_class.reader
                          val bin_t : t Bin_prot.Type_class.t
                        end
                      module Hashable : sig type t = t end
                      val hash : t -> int
                      val hashable :
                        t Core_kernel.Hashable.Hashtbl.Hashable.t
                      module Table :
                        sig
                          type key = t
                          type ('a, 'b) hashtbl =
                              ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                          type 'b t = (key, 'b) hashtbl
                          type ('a, 'b) t_ = 'b t
                          type 'a key_ = key
                          val hashable :
                            key Core_kernel.Core_hashtbl_intf.Hashable.t
                          val create :
                            ('a key_, 'b, unit -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_report_all_dups :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_or_error :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             ('a, 'b) t_ Core_kernel.Or_error.t)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_exn :
                            ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_multi :
                            ('a key_, 'b list,
                             ('a key_ * 'b) list -> ('a, 'b list) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_mapped :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'r) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key_exn :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list -> ('a, 'r) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val group :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             combine:('-> '-> 'b) ->
                             'r list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val sexp_of_key :
                            ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                          val clear : ('a, 'b) t_ -> unit
                          val copy : ('a, 'b) t_ -> ('a, 'b) t_
                          val invariant : ('a, 'b) t_ -> unit
                          val fold :
                            ('a, 'b) t_ ->
                            init:'->
                            f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                          val iter :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> unit) -> unit
                          val existsi :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val for_alli :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val length : ('a, 'b) t_ -> int
                          val is_empty : ('a, 'b) t_ -> bool
                          val mem : ('a, 'b) t_ -> 'a key_ -> bool
                          val remove : ('a, 'b) t_ -> 'a key_ -> unit
                          val remove_one :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val replace :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val set :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val add :
                            ('a, 'b) t_ ->
                            key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                          val add_exn :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val change :
                            ('a, 'b) t_ ->
                            'a key_ -> ('b option -> 'b option) -> unit
                          val add_multi :
                            ('a, 'b list) t_ ->
                            key:'a key_ -> data:'-> unit
                          val remove_multi :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val map :
                            ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_map :
                            ('c,
                             ('a, 'b) t_ ->
                             f:('-> 'c option) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c option) ->
                             ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter :
                            ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                          val filteri :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                          val partition_map :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:('-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_mapi :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:(key:'a key_ ->
                                 data:'-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_tf :
                            ('a, 'b) t_ ->
                            f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                          val partitioni_tf :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) ->
                            ('a, 'b) t_ * ('a, 'b) t_
                          val find_or_add :
                            ('a, 'b) t_ ->
                            'a key_ -> default:(unit -> 'b) -> 'b
                          val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                          val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                          val find_and_remove :
                            ('a, 'b) t_ -> 'a key_ -> 'b option
                          val iter_vals :
                            ('a, 'b) t_ -> f:('-> unit) -> unit
                          val merge :
                            ('c,
                             ('k, 'a) t_ ->
                             ('k, 'b) t_ ->
                             f:(key:'k key_ ->
                                [ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] -> 'c option) ->
                             ('k, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val merge_into :
                            f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                            src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                          val keys : ('a, 'b) t_ -> 'a key_ list
                          val data : ('a, 'b) t_ -> 'b list
                          val filter_inplace :
                            ('a, 'b) t_ -> f:('-> bool) -> unit
                          val filteri_inplace :
                            ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                          val equal :
                            ('a, 'b) t_ ->
                            ('a, 'b) t_ -> ('-> '-> bool) -> bool
                          val similar :
                            ('a, 'b1) t_ ->
                            ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                          val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                          val validate :
                            name:('a key_ -> string) ->
                            'Core_kernel.Validate.check ->
                            ('a, 'b) t_ Core_kernel.Validate.check
                          val incr :
                            ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Pooled_hashtbl :
                        sig
                          type key = t
                          type ('a, 'b) hashtbl =
                              ('a, 'b) Core_kernel.Pooled_hashtbl.t
                          type 'b t = (key, 'b) hashtbl
                          type ('a, 'b) t_ = 'b t
                          type 'a key_ = key
                          val hashable :
                            key Core_kernel.Core_hashtbl_intf.Hashable.t
                          val create :
                            ('a key_, 'b, unit -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_report_all_dups :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_or_error :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             ('a, 'b) t_ Core_kernel.Or_error.t)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_exn :
                            ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_multi :
                            ('a key_, 'b list,
                             ('a key_ * 'b) list -> ('a, 'b list) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_mapped :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'r) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key_exn :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list -> ('a, 'r) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val group :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             combine:('-> '-> 'b) ->
                             'r list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val sexp_of_key :
                            ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                          val clear : ('a, 'b) t_ -> unit
                          val copy : ('a, 'b) t_ -> ('a, 'b) t_
                          val invariant : ('a, 'b) t_ -> unit
                          val fold :
                            ('a, 'b) t_ ->
                            init:'->
                            f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                          val iter :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> unit) -> unit
                          val existsi :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val for_alli :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val length : ('a, 'b) t_ -> int
                          val is_empty : ('a, 'b) t_ -> bool
                          val mem : ('a, 'b) t_ -> 'a key_ -> bool
                          val remove : ('a, 'b) t_ -> 'a key_ -> unit
                          val remove_one :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val replace :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val set :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val add :
                            ('a, 'b) t_ ->
                            key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                          val add_exn :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val change :
                            ('a, 'b) t_ ->
                            'a key_ -> ('b option -> 'b option) -> unit
                          val add_multi :
                            ('a, 'b list) t_ ->
                            key:'a key_ -> data:'-> unit
                          val remove_multi :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val map :
                            ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_map :
                            ('c,
                             ('a, 'b) t_ ->
                             f:('-> 'c option) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c option) ->
                             ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter :
                            ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                          val filteri :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                          val partition_map :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:('-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_mapi :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:(key:'a key_ ->
                                 data:'-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_tf :
                            ('a, 'b) t_ ->
                            f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                          val partitioni_tf :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) ->
                            ('a, 'b) t_ * ('a, 'b) t_
                          val find_or_add :
                            ('a, 'b) t_ ->
                            'a key_ -> default:(unit -> 'b) -> 'b
                          val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                          val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                          val find_and_remove :
                            ('a, 'b) t_ -> 'a key_ -> 'b option
                          val iter_vals :
                            ('a, 'b) t_ -> f:('-> unit) -> unit
                          val merge :
                            ('c,
                             ('k, 'a) t_ ->
                             ('k, 'b) t_ ->
                             f:(key:'k key_ ->
                                [ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] -> 'c option) ->
                             ('k, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val merge_into :
                            f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                            src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                          val keys : ('a, 'b) t_ -> 'a key_ list
                          val data : ('a, 'b) t_ -> 'b list
                          val filter_inplace :
                            ('a, 'b) t_ -> f:('-> bool) -> unit
                          val filteri_inplace :
                            ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                          val equal :
                            ('a, 'b) t_ ->
                            ('a, 'b) t_ -> ('-> '-> bool) -> bool
                          val similar :
                            ('a, 'b1) t_ ->
                            ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                          val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                          val validate :
                            name:('a key_ -> string) ->
                            'Core_kernel.Validate.check ->
                            ('a, 'b) t_ Core_kernel.Validate.check
                          val incr :
                            ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Hash_set :
                        sig
                          type elt = t
                          type 'a hash_set = 'Core_kernel.Hash_set.t
                          type t = elt hash_set
                          type 'a t_ = t
                          type 'a elt_ = elt
                          val create :
                            ('a, unit -> 'a t_)
                            Core_kernel.Hash_set_intf.create_options_without_hashable
                          val of_list :
                            ('a, 'a elt_ list -> 'a t_)
                            Core_kernel.Hash_set_intf.create_options_without_hashable
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val bin_size_t : t Bin_prot.Size.sizer
                          val bin_write_t : t Bin_prot.Write.writer
                          val bin_read_t : t Bin_prot.Read.reader
                          val __bin_read_t__ :
                            (int -> t) Bin_prot.Read.reader
                          val bin_writer_t : t Bin_prot.Type_class.writer
                          val bin_reader_t : t Bin_prot.Type_class.reader
                          val bin_t : t Bin_prot.Type_class.t
                        end
                      module Hash_queue :
                        sig
                          module Key :
                            sig
                              type t = t
                              val hash : t -> int
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                              val compare : t -> t -> int
                            end
                          type 'a t = 'Block.Node.Key.Hash_queue.t
                          val length : 'a t -> int
                          val is_empty : 'a t -> bool
                          val iter : 'a t -> f:('-> unit) -> unit
                          val fold :
                            'a t ->
                            init:'accum ->
                            f:('accum -> '-> 'accum) -> 'accum
                          val exists : 'a t -> f:('-> bool) -> bool
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val count : 'a t -> f:('-> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            'a t -> f:('-> 'sum) -> 'sum
                          val find : 'a t -> f:('-> bool) -> 'a option
                          val find_map :
                            'a t -> f:('-> 'b option) -> 'b option
                          val to_list : 'a t -> 'a list
                          val to_array : 'a t -> 'a array
                          val min_elt :
                            'a t -> cmp:('-> '-> int) -> 'a option
                          val max_elt :
                            'a t -> cmp:('-> '-> int) -> 'a option
                          val invariant : 'a t -> unit
                          val create : unit -> 'a t
                          val clear : 'a t -> unit
                          val mem : 'a t -> Key.t -> bool
                          val lookup : 'a t -> Key.t -> 'a option
                          val lookup_exn : 'a t -> Key.t -> 'a
                          val enqueue :
                            'a t ->
                            Key.t -> '-> [ `Key_already_present | `Ok ]
                          val enqueue_exn : 'a t -> Key.t -> '-> unit
                          val first : 'a t -> 'a option
                          val keys : 'a t -> Key.t list
                          val dequeue : 'a t -> 'a option
                          val dequeue_exn : 'a t -> 'a
                          val dequeue_with_key : 'a t -> (Key.t * 'a) option
                          val dequeue_with_key_exn : 'a t -> Key.t * 'a
                          val dequeue_all : 'a t -> f:('-> unit) -> unit
                          val remove :
                            'a t -> Key.t -> [ `No_such_key | `Ok ]
                          val remove_exn : 'a t -> Key.t -> unit
                          val replace :
                            'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                          val replace_exn : 'a t -> Key.t -> '-> unit
                          val iteri :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val foldi :
                            'a t ->
                            init:'->
                            f:('-> key:Key.t -> data:'-> 'b) -> 'b
                        end
                      val pp : Format.formatter -> t -> unit
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val bin_t : t Bin_prot.Type_class.t
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val of_json : Ezjsonm.t -> t
                      val to_json : t -> Ezjsonm.t
                      val of_raw : string -> t
                      val to_raw : t -> string
                      val of_bytes : Core_kernel.Std.Bigstring.t -> t
                      val of_bytes' : string -> t
                    end
                  module Value :
                    sig
                      type key = key
                      type t = key IrminNode.t
                      val of_string : string -> t
                      val to_string : t -> string
                      val ( >= ) : t -> t -> bool
                      val ( <= ) : t -> t -> bool
                      val ( = ) : t -> t -> bool
                      val ( > ) : t -> t -> bool
                      val ( < ) : t -> t -> bool
                      val ( <> ) : t -> t -> bool
                      val equal : t -> t -> bool
                      val compare : t -> t -> int
                      val min : t -> t -> t
                      val max : t -> t -> t
                      val ascending : t -> t -> int
                      val descending : t -> t -> int
                      val between : t -> low:t -> high:t -> bool
                      module Replace_polymorphic_compare :
                        sig
                          val ( >= ) : t -> t -> bool
                          val ( <= ) : t -> t -> bool
                          val ( = ) : t -> t -> bool
                          val ( > ) : t -> t -> bool
                          val ( < ) : t -> t -> bool
                          val ( <> ) : t -> t -> bool
                          val equal : t -> t -> bool
                          val compare : t -> t -> int
                          val min : t -> t -> t
                          val max : t -> t -> t
                          val _squelch_unused_module_warning_ : unit
                        end
                      type comparator_witness =
                          Block.Node.Value.comparator_witness
                      val validate_lbound :
                        min:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val validate_ubound :
                        max:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val validate_bound :
                        min:t Core_kernel.Comparable_intf.bound ->
                        max:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                      module Map :
                        sig
                          module Key :
                            sig
                              type t = t
                              type comparator_witness = comparator_witness
                              val comparator :
                                (t, comparator_witness)
                                Core_kernel.Comparator.comparator
                            end
                          module Tree :
                            sig
                              type 'a t =
                                  (Key.t, 'a, Key.comparator_witness)
                                  Core_kernel.Core_map.Tree.t
                              val empty : 'a t
                              val singleton : Key.t -> '-> 'a t
                              val of_alist :
                                (Key.t * 'a) list ->
                                [ `Duplicate_key of Key.t | `Ok of 'a t ]
                              val of_alist_or_error :
                                (Key.t * 'a) list ->
                                'a t Core_kernel.Or_error.t
                              val of_alist_exn : (Key.t * 'a) list -> 'a t
                              val of_alist_multi :
                                (Key.t * 'a) list -> 'a list t
                              val of_alist_fold :
                                (Key.t * 'a) list ->
                                init:'-> f:('-> '-> 'b) -> 'b t
                              val of_alist_reduce :
                                (Key.t * 'a) list ->
                                f:('-> '-> 'a) -> 'a t
                              val of_sorted_array :
                                (Key.t * 'a) array ->
                                'a t Core_kernel.Or_error.t
                              val of_sorted_array_unchecked :
                                (Key.t * 'a) array -> 'a t
                              val of_tree : 'a t -> 'a t
                              val invariants : 'a t -> bool
                              val is_empty : 'a t -> bool
                              val length : 'a t -> int
                              val add : 'a t -> key:Key.t -> data:'-> 'a t
                              val add_multi :
                                'a list t ->
                                key:Key.t -> data:'-> 'a list t
                              val change :
                                'a t ->
                                Key.t -> ('a option -> 'a option) -> 'a t
                              val find : 'a t -> Key.t -> 'a option
                              val find_exn : 'a t -> Key.t -> 'a
                              val remove : 'a t -> Key.t -> 'a t
                              val mem : 'a t -> Key.t -> bool
                              val iter :
                                'a t ->
                                f:(key:Key.t -> data:'-> unit) -> unit
                              val iter2 :
                                'a t ->
                                'b t ->
                                f:(key:Key.t ->
                                   data:[ `Both of 'a * 'b
                                        | `Left of 'a
                                        | `Right of 'b ] ->
                                   unit) ->
                                unit
                              val map : 'a t -> f:('-> 'b) -> 'b t
                              val mapi :
                                'a t ->
                                f:(key:Key.t -> data:'-> 'b) -> 'b t
                              val fold :
                                'a t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val fold_right :
                                'a t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val filter :
                                'a t ->
                                f:(key:Key.t -> data:'-> bool) -> 'a t
                              val filter_map :
                                'a t -> f:('-> 'b option) -> 'b t
                              val filter_mapi :
                                'a t ->
                                f:(key:Key.t -> data:'-> 'b option) -> 'b t
                              val compare_direct :
                                ('-> '-> int) -> 'a t -> 'a t -> int
                              val equal :
                                ('-> '-> bool) -> 'a t -> 'a t -> bool
                              val keys : 'a t -> Key.t list
                              val data : 'a t -> 'a list
                              val to_alist : 'a t -> (Key.t * 'a) list
                              val validate :
                                name:(Key.t -> string) ->
                                'Core_kernel.Validate.check ->
                                'a t Core_kernel.Validate.check
                              val merge :
                                'a t ->
                                'b t ->
                                f:(key:Key.t ->
                                   [ `Both of 'a * 'b
                                   | `Left of 'a
                                   | `Right of 'b ] -> 'c option) ->
                                'c t
                              val symmetric_diff :
                                'a t ->
                                'a t ->
                                data_equal:('-> '-> bool) ->
                                (Key.t *
                                 [ `Left of 'a
                                 | `Right of 'a
                                 | `Unequal of 'a * 'a ])
                                Core_kernel.Sequence.t
                              val min_elt : 'a t -> (Key.t * 'a) option
                              val min_elt_exn : 'a t -> Key.t * 'a
                              val max_elt : 'a t -> (Key.t * 'a) option
                              val max_elt_exn : 'a t -> Key.t * 'a
                              val for_all : 'a t -> f:('-> bool) -> bool
                              val exists : 'a t -> f:('-> bool) -> bool
                              val fold_range_inclusive :
                                'a t ->
                                min:Key.t ->
                                max:Key.t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val range_to_alist :
                                'a t ->
                                min:Key.t -> max:Key.t -> (Key.t * 'a) list
                              val prev_key :
                                'a t -> Key.t -> (Key.t * 'a) option
                              val next_key :
                                'a t -> Key.t -> (Key.t * 'a) option
                              val rank : 'a t -> Key.t -> int option
                              val to_tree : 'a t -> 'a t
                              val to_sequence :
                                ?keys_in:[ `Decreasing_order
                                         | `Decreasing_order_less_than_or_equal_to of
                                             Key.t
                                         | `Increasing_order
                                         | `Increasing_order_greater_than_or_equal_to of
                                             Key.t ] ->
                                'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                              val t_of_sexp :
                                (Sexplib.Sexp.t -> 'a) ->
                                Sexplib.Sexp.t -> 'a t
                              val sexp_of_t :
                                ('-> Sexplib.Sexp.t) ->
                                'a t -> Sexplib.Sexp.t
                            end
                          type 'a t =
                              (Key.t, 'a, Key.comparator_witness)
                              Core_kernel.Core_map.t
                          val empty : 'a t
                          val singleton : Key.t -> '-> 'a t
                          val of_alist :
                            (Key.t * 'a) list ->
                            [ `Duplicate_key of Key.t | `Ok of 'a t ]
                          val of_alist_or_error :
                            (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                          val of_alist_exn : (Key.t * 'a) list -> 'a t
                          val of_alist_multi : (Key.t * 'a) list -> 'a list t
                          val of_alist_fold :
                            (Key.t * 'a) list ->
                            init:'-> f:('-> '-> 'b) -> 'b t
                          val of_alist_reduce :
                            (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                          val of_sorted_array :
                            (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked :
                            (Key.t * 'a) array -> 'a t
                          val of_tree : 'Tree.t -> 'a t
                          val invariants : 'a t -> bool
                          val is_empty : 'a t -> bool
                          val length : 'a t -> int
                          val add : 'a t -> key:Key.t -> data:'-> 'a t
                          val add_multi :
                            'a list t -> key:Key.t -> data:'-> 'a list t
                          val change :
                            'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                          val find : 'a t -> Key.t -> 'a option
                          val find_exn : 'a t -> Key.t -> 'a
                          val remove : 'a t -> Key.t -> 'a t
                          val mem : 'a t -> Key.t -> bool
                          val iter :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val iter2 :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               data:[ `Both of 'a * 'b
                                    | `Left of 'a
                                    | `Right of 'b ] ->
                               unit) ->
                            unit
                          val map : 'a t -> f:('-> 'b) -> 'b t
                          val mapi :
                            'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                          val fold :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val fold_right :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val filter :
                            'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                          val filter_map :
                            'a t -> f:('-> 'b option) -> 'b t
                          val filter_mapi :
                            'a t ->
                            f:(key:Key.t -> data:'-> 'b option) -> 'b t
                          val compare_direct :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val equal :
                            ('-> '-> bool) -> 'a t -> 'a t -> bool
                          val keys : 'a t -> Key.t list
                          val data : 'a t -> 'a list
                          val to_alist : 'a t -> (Key.t * 'a) list
                          val validate :
                            name:(Key.t -> string) ->
                            'Core_kernel.Validate.check ->
                            'a t Core_kernel.Validate.check
                          val merge :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            'c t
                          val symmetric_diff :
                            'a t ->
                            'a t ->
                            data_equal:('-> '-> bool) ->
                            (Key.t *
                             [ `Left of 'a
                             | `Right of 'a
                             | `Unequal of 'a * 'a ])
                            Core_kernel.Sequence.t
                          val min_elt : 'a t -> (Key.t * 'a) option
                          val min_elt_exn : 'a t -> Key.t * 'a
                          val max_elt : 'a t -> (Key.t * 'a) option
                          val max_elt_exn : 'a t -> Key.t * 'a
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val exists : 'a t -> f:('-> bool) -> bool
                          val fold_range_inclusive :
                            'a t ->
                            min:Key.t ->
                            max:Key.t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val range_to_alist :
                            'a t ->
                            min:Key.t -> max:Key.t -> (Key.t * 'a) list
                          val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val rank : 'a t -> Key.t -> int option
                          val to_tree : 'a t -> 'Tree.t
                          val to_sequence :
                            ?keys_in:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Key.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Key.t ] ->
                            'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                          val compare :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Set :
                        sig
                          module Elt :
                            sig
                              type t = t
                              type comparator_witness = comparator_witness
                              val comparator :
                                (t, comparator_witness)
                                Core_kernel.Comparator.comparator
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                            end
                          module Tree :
                            sig
                              type t =
                                  (Elt.t, Elt.comparator_witness)
                                  Core_kernel.Core_set.Tree.t
                              val length : t -> int
                              val is_empty : t -> bool
                              val iter : t -> f:(Elt.t -> unit) -> unit
                              val fold :
                                t ->
                                init:'accum ->
                                f:('accum -> Elt.t -> 'accum) -> 'accum
                              val exists : t -> f:(Elt.t -> bool) -> bool
                              val for_all : t -> f:(Elt.t -> bool) -> bool
                              val count : t -> f:(Elt.t -> bool) -> int
                              val sum :
                                (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                                t -> f:(Elt.t -> 'sum) -> 'sum
                              val find :
                                t -> f:(Elt.t -> bool) -> Elt.t option
                              val find_map :
                                t -> f:(Elt.t -> 'a option) -> 'a option
                              val to_list : t -> Elt.t list
                              val to_array : t -> Elt.t array
                              val invariants : t -> bool
                              val mem : t -> Elt.t -> bool
                              val add : t -> Elt.t -> t
                              val remove : t -> Elt.t -> t
                              val union : t -> t -> t
                              val inter : t -> t -> t
                              val diff : t -> t -> t
                              val compare_direct : t -> t -> int
                              val equal : t -> t -> bool
                              val subset : t -> t -> bool
                              val fold_until :
                                t ->
                                init:'->
                                f:('->
                                   Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                                'b
                              val fold_right :
                                t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                              val iter2 :
                                t ->
                                t ->
                                f:([ `Both of Elt.t * Elt.t
                                   | `Left of Elt.t
                                   | `Right of Elt.t ] -> unit) ->
                                unit
                              val filter : t -> f:(Elt.t -> bool) -> t
                              val partition_tf :
                                t -> f:(Elt.t -> bool) -> t * t
                              val elements : t -> Elt.t list
                              val min_elt : t -> Elt.t option
                              val min_elt_exn : t -> Elt.t
                              val max_elt : t -> Elt.t option
                              val max_elt_exn : t -> Elt.t
                              val choose : t -> Elt.t option
                              val choose_exn : t -> Elt.t
                              val split : t -> Elt.t -> t * bool * t
                              val group_by :
                                t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                              val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                              val find_index : t -> int -> Elt.t option
                              val remove_index : t -> int -> t
                              val to_tree : t -> t
                              val to_sequence :
                                ?in_:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Elt.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Elt.t ] ->
                                t -> Elt.t Core_kernel.Sequence.t
                              val to_map :
                                t ->
                                f:(Elt.t -> 'data) ->
                                (Elt.t, 'data, Elt.comparator_witness)
                                Core_kernel.Core_set_intf.Map.t
                              val empty : t
                              val singleton : Elt.t -> t
                              val union_list : t list -> t
                              val of_list : Elt.t list -> t
                              val of_array : Elt.t array -> t
                              val of_sorted_array :
                                Elt.t array -> t Core_kernel.Or_error.t
                              val of_sorted_array_unchecked :
                                Elt.t array -> t
                              val stable_dedup_list :
                                Elt.t list -> Elt.t list
                              val map :
                                ('a, 'b) Core_kernel.Core_set.Tree.t ->
                                f:('-> Elt.t) -> t
                              val filter_map :
                                ('a, 'b) Core_kernel.Core_set.Tree.t ->
                                f:('-> Elt.t option) -> t
                              val of_tree : t -> t
                              val of_map_keys :
                                (Elt.t, 'a, Elt.comparator_witness)
                                Core_kernel.Core_set_intf.Map.t -> t
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                              val compare : t -> t -> int
                            end
                          type t =
                              (Elt.t, Elt.comparator_witness)
                              Core_kernel.Core_set.t
                          val length : t -> int
                          val is_empty : t -> bool
                          val iter : t -> f:(Elt.t -> unit) -> unit
                          val fold :
                            t ->
                            init:'accum ->
                            f:('accum -> Elt.t -> 'accum) -> 'accum
                          val exists : t -> f:(Elt.t -> bool) -> bool
                          val for_all : t -> f:(Elt.t -> bool) -> bool
                          val count : t -> f:(Elt.t -> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            t -> f:(Elt.t -> 'sum) -> 'sum
                          val find : t -> f:(Elt.t -> bool) -> Elt.t option
                          val find_map :
                            t -> f:(Elt.t -> 'a option) -> 'a option
                          val to_list : t -> Elt.t list
                          val to_array : t -> Elt.t array
                          val invariants : t -> bool
                          val mem : t -> Elt.t -> bool
                          val add : t -> Elt.t -> t
                          val remove : t -> Elt.t -> t
                          val union : t -> t -> t
                          val inter : t -> t -> t
                          val diff : t -> t -> t
                          val compare_direct : t -> t -> int
                          val equal : t -> t -> bool
                          val subset : t -> t -> bool
                          val fold_until :
                            t ->
                            init:'->
                            f:('->
                               Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                            'b
                          val fold_right :
                            t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                          val iter2 :
                            t ->
                            t ->
                            f:([ `Both of Elt.t * Elt.t
                               | `Left of Elt.t
                               | `Right of Elt.t ] -> unit) ->
                            unit
                          val filter : t -> f:(Elt.t -> bool) -> t
                          val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                          val elements : t -> Elt.t list
                          val min_elt : t -> Elt.t option
                          val min_elt_exn : t -> Elt.t
                          val max_elt : t -> Elt.t option
                          val max_elt_exn : t -> Elt.t
                          val choose : t -> Elt.t option
                          val choose_exn : t -> Elt.t
                          val split : t -> Elt.t -> t * bool * t
                          val group_by :
                            t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                          val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                          val find_index : t -> int -> Elt.t option
                          val remove_index : t -> int -> t
                          val to_tree : t -> Tree.t
                          val to_sequence :
                            ?in_:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Elt.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Elt.t ] ->
                            t -> Elt.t Core_kernel.Sequence.t
                          val to_map :
                            t ->
                            f:(Elt.t -> 'data) ->
                            (Elt.t, 'data, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t
                          val empty : t
                          val singleton : Elt.t -> t
                          val union_list : t list -> t
                          val of_list : Elt.t list -> t
                          val of_array : Elt.t array -> t
                          val of_sorted_array :
                            Elt.t array -> t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked : Elt.t array -> t
                          val stable_dedup_list : Elt.t list -> Elt.t list
                          val map :
                            ('a, 'b) Core_kernel.Core_set.t ->
                            f:('-> Elt.t) -> t
                          val filter_map :
                            ('a, 'b) Core_kernel.Core_set.t ->
                            f:('-> Elt.t option) -> t
                          val of_tree : Tree.t -> t
                          val of_map_keys :
                            (Elt.t, 'a, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t -> t
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                          val bin_size_t : t Bin_prot.Size.sizer
                          val bin_write_t : t Bin_prot.Write.writer
                          val bin_read_t : t Bin_prot.Read.reader
                          val __bin_read_t__ :
                            (int -> t) Bin_prot.Read.reader
                          val bin_writer_t : t Bin_prot.Type_class.writer
                          val bin_reader_t : t Bin_prot.Type_class.reader
                          val bin_t : t Bin_prot.Type_class.t
                        end
                      module Hashable : sig type t = t end
                      val hash : t -> int
                      val hashable :
                        t Core_kernel.Hashable.Hashtbl.Hashable.t
                      module Table :
                        sig
                          type key = t
                          type ('a, 'b) hashtbl =
                              ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                          type 'b t = (key, 'b) hashtbl
                          type ('a, 'b) t_ = 'b t
                          type 'a key_ = key
                          val hashable :
                            key Core_kernel.Core_hashtbl_intf.Hashable.t
                          val create :
                            ('a key_, 'b, unit -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_report_all_dups :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_or_error :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             ('a, 'b) t_ Core_kernel.Or_error.t)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_exn :
                            ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_multi :
                            ('a key_, 'b list,
                             ('a key_ * 'b) list -> ('a, 'b list) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_mapped :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'r) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key_exn :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list -> ('a, 'r) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val group :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             combine:('-> '-> 'b) ->
                             'r list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val sexp_of_key :
                            ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                          val clear : ('a, 'b) t_ -> unit
                          val copy : ('a, 'b) t_ -> ('a, 'b) t_
                          val invariant : ('a, 'b) t_ -> unit
                          val fold :
                            ('a, 'b) t_ ->
                            init:'->
                            f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                          val iter :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> unit) -> unit
                          val existsi :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val for_alli :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val length : ('a, 'b) t_ -> int
                          val is_empty : ('a, 'b) t_ -> bool
                          val mem : ('a, 'b) t_ -> 'a key_ -> bool
                          val remove : ('a, 'b) t_ -> 'a key_ -> unit
                          val remove_one :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val replace :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val set :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val add :
                            ('a, 'b) t_ ->
                            key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                          val add_exn :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val change :
                            ('a, 'b) t_ ->
                            'a key_ -> ('b option -> 'b option) -> unit
                          val add_multi :
                            ('a, 'b list) t_ ->
                            key:'a key_ -> data:'-> unit
                          val remove_multi :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val map :
                            ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_map :
                            ('c,
                             ('a, 'b) t_ ->
                             f:('-> 'c option) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c option) ->
                             ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter :
                            ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                          val filteri :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                          val partition_map :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:('-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_mapi :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:(key:'a key_ ->
                                 data:'-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_tf :
                            ('a, 'b) t_ ->
                            f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                          val partitioni_tf :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) ->
                            ('a, 'b) t_ * ('a, 'b) t_
                          val find_or_add :
                            ('a, 'b) t_ ->
                            'a key_ -> default:(unit -> 'b) -> 'b
                          val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                          val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                          val find_and_remove :
                            ('a, 'b) t_ -> 'a key_ -> 'b option
                          val iter_vals :
                            ('a, 'b) t_ -> f:('-> unit) -> unit
                          val merge :
                            ('c,
                             ('k, 'a) t_ ->
                             ('k, 'b) t_ ->
                             f:(key:'k key_ ->
                                [ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] -> 'c option) ->
                             ('k, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val merge_into :
                            f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                            src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                          val keys : ('a, 'b) t_ -> 'a key_ list
                          val data : ('a, 'b) t_ -> 'b list
                          val filter_inplace :
                            ('a, 'b) t_ -> f:('-> bool) -> unit
                          val filteri_inplace :
                            ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                          val equal :
                            ('a, 'b) t_ ->
                            ('a, 'b) t_ -> ('-> '-> bool) -> bool
                          val similar :
                            ('a, 'b1) t_ ->
                            ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                          val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                          val validate :
                            name:('a key_ -> string) ->
                            'Core_kernel.Validate.check ->
                            ('a, 'b) t_ Core_kernel.Validate.check
                          val incr :
                            ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Pooled_hashtbl :
                        sig
                          type key = t
                          type ('a, 'b) hashtbl =
                              ('a, 'b) Core_kernel.Pooled_hashtbl.t
                          type 'b t = (key, 'b) hashtbl
                          type ('a, 'b) t_ = 'b t
                          type 'a key_ = key
                          val hashable :
                            key Core_kernel.Core_hashtbl_intf.Hashable.t
                          val create :
                            ('a key_, 'b, unit -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_report_all_dups :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_or_error :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             ('a, 'b) t_ Core_kernel.Or_error.t)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_exn :
                            ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_multi :
                            ('a key_, 'b list,
                             ('a key_ * 'b) list -> ('a, 'b list) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_mapped :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'r) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key_exn :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list -> ('a, 'r) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val group :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             combine:('-> '-> 'b) ->
                             'r list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val sexp_of_key :
                            ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                          val clear : ('a, 'b) t_ -> unit
                          val copy : ('a, 'b) t_ -> ('a, 'b) t_
                          val invariant : ('a, 'b) t_ -> unit
                          val fold :
                            ('a, 'b) t_ ->
                            init:'->
                            f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                          val iter :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> unit) -> unit
                          val existsi :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val for_alli :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val length : ('a, 'b) t_ -> int
                          val is_empty : ('a, 'b) t_ -> bool
                          val mem : ('a, 'b) t_ -> 'a key_ -> bool
                          val remove : ('a, 'b) t_ -> 'a key_ -> unit
                          val remove_one :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val replace :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val set :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val add :
                            ('a, 'b) t_ ->
                            key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                          val add_exn :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val change :
                            ('a, 'b) t_ ->
                            'a key_ -> ('b option -> 'b option) -> unit
                          val add_multi :
                            ('a, 'b list) t_ ->
                            key:'a key_ -> data:'-> unit
                          val remove_multi :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val map :
                            ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_map :
                            ('c,
                             ('a, 'b) t_ ->
                             f:('-> 'c option) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c option) ->
                             ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter :
                            ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                          val filteri :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                          val partition_map :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:('-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_mapi :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:(key:'a key_ ->
                                 data:'-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_tf :
                            ('a, 'b) t_ ->
                            f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                          val partitioni_tf :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) ->
                            ('a, 'b) t_ * ('a, 'b) t_
                          val find_or_add :
                            ('a, 'b) t_ ->
                            'a key_ -> default:(unit -> 'b) -> 'b
                          val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                          val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                          val find_and_remove :
                            ('a, 'b) t_ -> 'a key_ -> 'b option
                          val iter_vals :
                            ('a, 'b) t_ -> f:('-> unit) -> unit
                          val merge :
                            ('c,
                             ('k, 'a) t_ ->
                             ('k, 'b) t_ ->
                             f:(key:'k key_ ->
                                [ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] -> 'c option) ->
                             ('k, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val merge_into :
                            f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                            src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                          val keys : ('a, 'b) t_ -> 'a key_ list
                          val data : ('a, 'b) t_ -> 'b list
                          val filter_inplace :
                            ('a, 'b) t_ -> f:('-> bool) -> unit
                          val filteri_inplace :
                            ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                          val equal :
                            ('a, 'b) t_ ->
                            ('a, 'b) t_ -> ('-> '-> bool) -> bool
                          val similar :
                            ('a, 'b1) t_ ->
                            ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                          val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                          val validate :
                            name:('a key_ -> string) ->
                            'Core_kernel.Validate.check ->
                            ('a, 'b) t_ Core_kernel.Validate.check
                          val incr :
                            ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Hash_set :
                        sig
                          type elt = t
                          type 'a hash_set = 'Core_kernel.Hash_set.t
                          type t = elt hash_set
                          type 'a t_ = t
                          type 'a elt_ = elt
                          val create :
                            ('a, unit -> 'a t_)
                            Core_kernel.Hash_set_intf.create_options_without_hashable
                          val of_list :
                            ('a, 'a elt_ list -> 'a t_)
                            Core_kernel.Hash_set_intf.create_options_without_hashable
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val bin_size_t : t Bin_prot.Size.sizer
                          val bin_write_t : t Bin_prot.Write.writer
                          val bin_read_t : t Bin_prot.Read.reader
                          val __bin_read_t__ :
                            (int -> t) Bin_prot.Read.reader
                          val bin_writer_t : t Bin_prot.Type_class.writer
                          val bin_reader_t : t Bin_prot.Type_class.reader
                          val bin_t : t Bin_prot.Type_class.t
                        end
                      module Hash_queue :
                        sig
                          module Key :
                            sig
                              type t = t
                              val hash : t -> int
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                              val compare : t -> t -> int
                            end
                          type 'a t = 'Block.Node.Value.Hash_queue.t
                          val length : 'a t -> int
                          val is_empty : 'a t -> bool
                          val iter : 'a t -> f:('-> unit) -> unit
                          val fold :
                            'a t ->
                            init:'accum ->
                            f:('accum -> '-> 'accum) -> 'accum
                          val exists : 'a t -> f:('-> bool) -> bool
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val count : 'a t -> f:('-> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            'a t -> f:('-> 'sum) -> 'sum
                          val find : 'a t -> f:('-> bool) -> 'a option
                          val find_map :
                            'a t -> f:('-> 'b option) -> 'b option
                          val to_list : 'a t -> 'a list
                          val to_array : 'a t -> 'a array
                          val min_elt :
                            'a t -> cmp:('-> '-> int) -> 'a option
                          val max_elt :
                            'a t -> cmp:('-> '-> int) -> 'a option
                          val invariant : 'a t -> unit
                          val create : unit -> 'a t
                          val clear : 'a t -> unit
                          val mem : 'a t -> Key.t -> bool
                          val lookup : 'a t -> Key.t -> 'a option
                          val lookup_exn : 'a t -> Key.t -> 'a
                          val enqueue :
                            'a t ->
                            Key.t -> '-> [ `Key_already_present | `Ok ]
                          val enqueue_exn : 'a t -> Key.t -> '-> unit
                          val first : 'a t -> 'a option
                          val keys : 'a t -> Key.t list
                          val dequeue : 'a t -> 'a option
                          val dequeue_exn : 'a t -> 'a
                          val dequeue_with_key : 'a t -> (Key.t * 'a) option
                          val dequeue_with_key_exn : 'a t -> Key.t * 'a
                          val dequeue_all : 'a t -> f:('-> unit) -> unit
                          val remove :
                            'a t -> Key.t -> [ `No_such_key | `Ok ]
                          val remove_exn : 'a t -> Key.t -> unit
                          val replace :
                            'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                          val replace_exn : 'a t -> Key.t -> '-> unit
                          val iteri :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val foldi :
                            'a t ->
                            init:'->
                            f:('-> key:Key.t -> data:'-> 'b) -> 'b
                        end
                      val pp : Format.formatter -> t -> unit
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val bin_t : t Bin_prot.Type_class.t
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val of_json : Ezjsonm.t -> t
                      val to_json : t -> Ezjsonm.t
                      val merge : t IrminMerge.t
                    end
                end
              module Commit :
                sig
                  type key = key
                  type value = key IrminCommit.t
                  type t = Block.Commit.t
                  val create : unit -> t Lwt.t
                  val read : t -> key -> value option Lwt.t
                  val read_exn : t -> key -> value Lwt.t
                  val mem : t -> key -> bool Lwt.t
                  val dump : t -> (key * value) list Lwt.t
                  val add : t -> value -> key Lwt.t
                  type node = key IrminNode.t
                  val commit :
                    t ->
                    IrminCommit.origin ->
                    ?node:node -> parents:value list -> (key * value) Lwt.t
                  val node : t -> value -> node Lwt.t option
                  val parents : t -> value -> value Lwt.t list
                  val merge : t -> key IrminMerge.t
                  val find_common_ancestor :
                    t -> key -> key -> key option Lwt.t
                  val find_common_ancestor_exn : t -> key -> key -> key Lwt.t
                  val list : t -> ?depth:int -> key list -> key list Lwt.t
                  module Key :
                    sig
                      type t = key
                      val of_string : string -> t
                      val to_string : t -> string
                      val ( >= ) : t -> t -> bool
                      val ( <= ) : t -> t -> bool
                      val ( = ) : t -> t -> bool
                      val ( > ) : t -> t -> bool
                      val ( < ) : t -> t -> bool
                      val ( <> ) : t -> t -> bool
                      val equal : t -> t -> bool
                      val compare : t -> t -> int
                      val min : t -> t -> t
                      val max : t -> t -> t
                      val ascending : t -> t -> int
                      val descending : t -> t -> int
                      val between : t -> low:t -> high:t -> bool
                      module Replace_polymorphic_compare :
                        sig
                          val ( >= ) : t -> t -> bool
                          val ( <= ) : t -> t -> bool
                          val ( = ) : t -> t -> bool
                          val ( > ) : t -> t -> bool
                          val ( < ) : t -> t -> bool
                          val ( <> ) : t -> t -> bool
                          val equal : t -> t -> bool
                          val compare : t -> t -> int
                          val min : t -> t -> t
                          val max : t -> t -> t
                          val _squelch_unused_module_warning_ : unit
                        end
                      type comparator_witness =
                          Block.Commit.Key.comparator_witness
                      val validate_lbound :
                        min:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val validate_ubound :
                        max:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val validate_bound :
                        min:t Core_kernel.Comparable_intf.bound ->
                        max:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                      module Map :
                        sig
                          module Key :
                            sig
                              type t = t
                              type comparator_witness = comparator_witness
                              val comparator :
                                (t, comparator_witness)
                                Core_kernel.Comparator.comparator
                            end
                          module Tree :
                            sig
                              type 'a t =
                                  (Key.t, 'a, Key.comparator_witness)
                                  Core_kernel.Core_map.Tree.t
                              val empty : 'a t
                              val singleton : Key.t -> '-> 'a t
                              val of_alist :
                                (Key.t * 'a) list ->
                                [ `Duplicate_key of Key.t | `Ok of 'a t ]
                              val of_alist_or_error :
                                (Key.t * 'a) list ->
                                'a t Core_kernel.Or_error.t
                              val of_alist_exn : (Key.t * 'a) list -> 'a t
                              val of_alist_multi :
                                (Key.t * 'a) list -> 'a list t
                              val of_alist_fold :
                                (Key.t * 'a) list ->
                                init:'-> f:('-> '-> 'b) -> 'b t
                              val of_alist_reduce :
                                (Key.t * 'a) list ->
                                f:('-> '-> 'a) -> 'a t
                              val of_sorted_array :
                                (Key.t * 'a) array ->
                                'a t Core_kernel.Or_error.t
                              val of_sorted_array_unchecked :
                                (Key.t * 'a) array -> 'a t
                              val of_tree : 'a t -> 'a t
                              val invariants : 'a t -> bool
                              val is_empty : 'a t -> bool
                              val length : 'a t -> int
                              val add : 'a t -> key:Key.t -> data:'-> 'a t
                              val add_multi :
                                'a list t ->
                                key:Key.t -> data:'-> 'a list t
                              val change :
                                'a t ->
                                Key.t -> ('a option -> 'a option) -> 'a t
                              val find : 'a t -> Key.t -> 'a option
                              val find_exn : 'a t -> Key.t -> 'a
                              val remove : 'a t -> Key.t -> 'a t
                              val mem : 'a t -> Key.t -> bool
                              val iter :
                                'a t ->
                                f:(key:Key.t -> data:'-> unit) -> unit
                              val iter2 :
                                'a t ->
                                'b t ->
                                f:(key:Key.t ->
                                   data:[ `Both of 'a * 'b
                                        | `Left of 'a
                                        | `Right of 'b ] ->
                                   unit) ->
                                unit
                              val map : 'a t -> f:('-> 'b) -> 'b t
                              val mapi :
                                'a t ->
                                f:(key:Key.t -> data:'-> 'b) -> 'b t
                              val fold :
                                'a t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val fold_right :
                                'a t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val filter :
                                'a t ->
                                f:(key:Key.t -> data:'-> bool) -> 'a t
                              val filter_map :
                                'a t -> f:('-> 'b option) -> 'b t
                              val filter_mapi :
                                'a t ->
                                f:(key:Key.t -> data:'-> 'b option) -> 'b t
                              val compare_direct :
                                ('-> '-> int) -> 'a t -> 'a t -> int
                              val equal :
                                ('-> '-> bool) -> 'a t -> 'a t -> bool
                              val keys : 'a t -> Key.t list
                              val data : 'a t -> 'a list
                              val to_alist : 'a t -> (Key.t * 'a) list
                              val validate :
                                name:(Key.t -> string) ->
                                'Core_kernel.Validate.check ->
                                'a t Core_kernel.Validate.check
                              val merge :
                                'a t ->
                                'b t ->
                                f:(key:Key.t ->
                                   [ `Both of 'a * 'b
                                   | `Left of 'a
                                   | `Right of 'b ] -> 'c option) ->
                                'c t
                              val symmetric_diff :
                                'a t ->
                                'a t ->
                                data_equal:('-> '-> bool) ->
                                (Key.t *
                                 [ `Left of 'a
                                 | `Right of 'a
                                 | `Unequal of 'a * 'a ])
                                Core_kernel.Sequence.t
                              val min_elt : 'a t -> (Key.t * 'a) option
                              val min_elt_exn : 'a t -> Key.t * 'a
                              val max_elt : 'a t -> (Key.t * 'a) option
                              val max_elt_exn : 'a t -> Key.t * 'a
                              val for_all : 'a t -> f:('-> bool) -> bool
                              val exists : 'a t -> f:('-> bool) -> bool
                              val fold_range_inclusive :
                                'a t ->
                                min:Key.t ->
                                max:Key.t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val range_to_alist :
                                'a t ->
                                min:Key.t -> max:Key.t -> (Key.t * 'a) list
                              val prev_key :
                                'a t -> Key.t -> (Key.t * 'a) option
                              val next_key :
                                'a t -> Key.t -> (Key.t * 'a) option
                              val rank : 'a t -> Key.t -> int option
                              val to_tree : 'a t -> 'a t
                              val to_sequence :
                                ?keys_in:[ `Decreasing_order
                                         | `Decreasing_order_less_than_or_equal_to of
                                             Key.t
                                         | `Increasing_order
                                         | `Increasing_order_greater_than_or_equal_to of
                                             Key.t ] ->
                                'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                              val t_of_sexp :
                                (Sexplib.Sexp.t -> 'a) ->
                                Sexplib.Sexp.t -> 'a t
                              val sexp_of_t :
                                ('-> Sexplib.Sexp.t) ->
                                'a t -> Sexplib.Sexp.t
                            end
                          type 'a t =
                              (Key.t, 'a, Key.comparator_witness)
                              Core_kernel.Core_map.t
                          val empty : 'a t
                          val singleton : Key.t -> '-> 'a t
                          val of_alist :
                            (Key.t * 'a) list ->
                            [ `Duplicate_key of Key.t | `Ok of 'a t ]
                          val of_alist_or_error :
                            (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                          val of_alist_exn : (Key.t * 'a) list -> 'a t
                          val of_alist_multi : (Key.t * 'a) list -> 'a list t
                          val of_alist_fold :
                            (Key.t * 'a) list ->
                            init:'-> f:('-> '-> 'b) -> 'b t
                          val of_alist_reduce :
                            (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                          val of_sorted_array :
                            (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked :
                            (Key.t * 'a) array -> 'a t
                          val of_tree : 'Tree.t -> 'a t
                          val invariants : 'a t -> bool
                          val is_empty : 'a t -> bool
                          val length : 'a t -> int
                          val add : 'a t -> key:Key.t -> data:'-> 'a t
                          val add_multi :
                            'a list t -> key:Key.t -> data:'-> 'a list t
                          val change :
                            'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                          val find : 'a t -> Key.t -> 'a option
                          val find_exn : 'a t -> Key.t -> 'a
                          val remove : 'a t -> Key.t -> 'a t
                          val mem : 'a t -> Key.t -> bool
                          val iter :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val iter2 :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               data:[ `Both of 'a * 'b
                                    | `Left of 'a
                                    | `Right of 'b ] ->
                               unit) ->
                            unit
                          val map : 'a t -> f:('-> 'b) -> 'b t
                          val mapi :
                            'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                          val fold :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val fold_right :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val filter :
                            'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                          val filter_map :
                            'a t -> f:('-> 'b option) -> 'b t
                          val filter_mapi :
                            'a t ->
                            f:(key:Key.t -> data:'-> 'b option) -> 'b t
                          val compare_direct :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val equal :
                            ('-> '-> bool) -> 'a t -> 'a t -> bool
                          val keys : 'a t -> Key.t list
                          val data : 'a t -> 'a list
                          val to_alist : 'a t -> (Key.t * 'a) list
                          val validate :
                            name:(Key.t -> string) ->
                            'Core_kernel.Validate.check ->
                            'a t Core_kernel.Validate.check
                          val merge :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            'c t
                          val symmetric_diff :
                            'a t ->
                            'a t ->
                            data_equal:('-> '-> bool) ->
                            (Key.t *
                             [ `Left of 'a
                             | `Right of 'a
                             | `Unequal of 'a * 'a ])
                            Core_kernel.Sequence.t
                          val min_elt : 'a t -> (Key.t * 'a) option
                          val min_elt_exn : 'a t -> Key.t * 'a
                          val max_elt : 'a t -> (Key.t * 'a) option
                          val max_elt_exn : 'a t -> Key.t * 'a
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val exists : 'a t -> f:('-> bool) -> bool
                          val fold_range_inclusive :
                            'a t ->
                            min:Key.t ->
                            max:Key.t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val range_to_alist :
                            'a t ->
                            min:Key.t -> max:Key.t -> (Key.t * 'a) list
                          val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val rank : 'a t -> Key.t -> int option
                          val to_tree : 'a t -> 'Tree.t
                          val to_sequence :
                            ?keys_in:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Key.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Key.t ] ->
                            'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                          val compare :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Set :
                        sig
                          module Elt :
                            sig
                              type t = t
                              type comparator_witness = comparator_witness
                              val comparator :
                                (t, comparator_witness)
                                Core_kernel.Comparator.comparator
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                            end
                          module Tree :
                            sig
                              type t =
                                  (Elt.t, Elt.comparator_witness)
                                  Core_kernel.Core_set.Tree.t
                              val length : t -> int
                              val is_empty : t -> bool
                              val iter : t -> f:(Elt.t -> unit) -> unit
                              val fold :
                                t ->
                                init:'accum ->
                                f:('accum -> Elt.t -> 'accum) -> 'accum
                              val exists : t -> f:(Elt.t -> bool) -> bool
                              val for_all : t -> f:(Elt.t -> bool) -> bool
                              val count : t -> f:(Elt.t -> bool) -> int
                              val sum :
                                (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                                t -> f:(Elt.t -> 'sum) -> 'sum
                              val find :
                                t -> f:(Elt.t -> bool) -> Elt.t option
                              val find_map :
                                t -> f:(Elt.t -> 'a option) -> 'a option
                              val to_list : t -> Elt.t list
                              val to_array : t -> Elt.t array
                              val invariants : t -> bool
                              val mem : t -> Elt.t -> bool
                              val add : t -> Elt.t -> t
                              val remove : t -> Elt.t -> t
                              val union : t -> t -> t
                              val inter : t -> t -> t
                              val diff : t -> t -> t
                              val compare_direct : t -> t -> int
                              val equal : t -> t -> bool
                              val subset : t -> t -> bool
                              val fold_until :
                                t ->
                                init:'->
                                f:('->
                                   Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                                'b
                              val fold_right :
                                t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                              val iter2 :
                                t ->
                                t ->
                                f:([ `Both of Elt.t * Elt.t
                                   | `Left of Elt.t
                                   | `Right of Elt.t ] -> unit) ->
                                unit
                              val filter : t -> f:(Elt.t -> bool) -> t
                              val partition_tf :
                                t -> f:(Elt.t -> bool) -> t * t
                              val elements : t -> Elt.t list
                              val min_elt : t -> Elt.t option
                              val min_elt_exn : t -> Elt.t
                              val max_elt : t -> Elt.t option
                              val max_elt_exn : t -> Elt.t
                              val choose : t -> Elt.t option
                              val choose_exn : t -> Elt.t
                              val split : t -> Elt.t -> t * bool * t
                              val group_by :
                                t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                              val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                              val find_index : t -> int -> Elt.t option
                              val remove_index : t -> int -> t
                              val to_tree : t -> t
                              val to_sequence :
                                ?in_:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Elt.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Elt.t ] ->
                                t -> Elt.t Core_kernel.Sequence.t
                              val to_map :
                                t ->
                                f:(Elt.t -> 'data) ->
                                (Elt.t, 'data, Elt.comparator_witness)
                                Core_kernel.Core_set_intf.Map.t
                              val empty : t
                              val singleton : Elt.t -> t
                              val union_list : t list -> t
                              val of_list : Elt.t list -> t
                              val of_array : Elt.t array -> t
                              val of_sorted_array :
                                Elt.t array -> t Core_kernel.Or_error.t
                              val of_sorted_array_unchecked :
                                Elt.t array -> t
                              val stable_dedup_list :
                                Elt.t list -> Elt.t list
                              val map :
                                ('a, 'b) Core_kernel.Core_set.Tree.t ->
                                f:('-> Elt.t) -> t
                              val filter_map :
                                ('a, 'b) Core_kernel.Core_set.Tree.t ->
                                f:('-> Elt.t option) -> t
                              val of_tree : t -> t
                              val of_map_keys :
                                (Elt.t, 'a, Elt.comparator_witness)
                                Core_kernel.Core_set_intf.Map.t -> t
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                              val compare : t -> t -> int
                            end
                          type t =
                              (Elt.t, Elt.comparator_witness)
                              Core_kernel.Core_set.t
                          val length : t -> int
                          val is_empty : t -> bool
                          val iter : t -> f:(Elt.t -> unit) -> unit
                          val fold :
                            t ->
                            init:'accum ->
                            f:('accum -> Elt.t -> 'accum) -> 'accum
                          val exists : t -> f:(Elt.t -> bool) -> bool
                          val for_all : t -> f:(Elt.t -> bool) -> bool
                          val count : t -> f:(Elt.t -> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            t -> f:(Elt.t -> 'sum) -> 'sum
                          val find : t -> f:(Elt.t -> bool) -> Elt.t option
                          val find_map :
                            t -> f:(Elt.t -> 'a option) -> 'a option
                          val to_list : t -> Elt.t list
                          val to_array : t -> Elt.t array
                          val invariants : t -> bool
                          val mem : t -> Elt.t -> bool
                          val add : t -> Elt.t -> t
                          val remove : t -> Elt.t -> t
                          val union : t -> t -> t
                          val inter : t -> t -> t
                          val diff : t -> t -> t
                          val compare_direct : t -> t -> int
                          val equal : t -> t -> bool
                          val subset : t -> t -> bool
                          val fold_until :
                            t ->
                            init:'->
                            f:('->
                               Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                            'b
                          val fold_right :
                            t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                          val iter2 :
                            t ->
                            t ->
                            f:([ `Both of Elt.t * Elt.t
                               | `Left of Elt.t
                               | `Right of Elt.t ] -> unit) ->
                            unit
                          val filter : t -> f:(Elt.t -> bool) -> t
                          val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                          val elements : t -> Elt.t list
                          val min_elt : t -> Elt.t option
                          val min_elt_exn : t -> Elt.t
                          val max_elt : t -> Elt.t option
                          val max_elt_exn : t -> Elt.t
                          val choose : t -> Elt.t option
                          val choose_exn : t -> Elt.t
                          val split : t -> Elt.t -> t * bool * t
                          val group_by :
                            t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                          val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                          val find_index : t -> int -> Elt.t option
                          val remove_index : t -> int -> t
                          val to_tree : t -> Tree.t
                          val to_sequence :
                            ?in_:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Elt.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Elt.t ] ->
                            t -> Elt.t Core_kernel.Sequence.t
                          val to_map :
                            t ->
                            f:(Elt.t -> 'data) ->
                            (Elt.t, 'data, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t
                          val empty : t
                          val singleton : Elt.t -> t
                          val union_list : t list -> t
                          val of_list : Elt.t list -> t
                          val of_array : Elt.t array -> t
                          val of_sorted_array :
                            Elt.t array -> t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked : Elt.t array -> t
                          val stable_dedup_list : Elt.t list -> Elt.t list
                          val map :
                            ('a, 'b) Core_kernel.Core_set.t ->
                            f:('-> Elt.t) -> t
                          val filter_map :
                            ('a, 'b) Core_kernel.Core_set.t ->
                            f:('-> Elt.t option) -> t
                          val of_tree : Tree.t -> t
                          val of_map_keys :
                            (Elt.t, 'a, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t -> t
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                          val bin_size_t : t Bin_prot.Size.sizer
                          val bin_write_t : t Bin_prot.Write.writer
                          val bin_read_t : t Bin_prot.Read.reader
                          val __bin_read_t__ :
                            (int -> t) Bin_prot.Read.reader
                          val bin_writer_t : t Bin_prot.Type_class.writer
                          val bin_reader_t : t Bin_prot.Type_class.reader
                          val bin_t : t Bin_prot.Type_class.t
                        end
                      module Hashable : sig type t = t end
                      val hash : t -> int
                      val hashable :
                        t Core_kernel.Hashable.Hashtbl.Hashable.t
                      module Table :
                        sig
                          type key = t
                          type ('a, 'b) hashtbl =
                              ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                          type 'b t = (key, 'b) hashtbl
                          type ('a, 'b) t_ = 'b t
                          type 'a key_ = key
                          val hashable :
                            key Core_kernel.Core_hashtbl_intf.Hashable.t
                          val create :
                            ('a key_, 'b, unit -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_report_all_dups :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_or_error :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             ('a, 'b) t_ Core_kernel.Or_error.t)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_exn :
                            ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_multi :
                            ('a key_, 'b list,
                             ('a key_ * 'b) list -> ('a, 'b list) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_mapped :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'r) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key_exn :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list -> ('a, 'r) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val group :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             combine:('-> '-> 'b) ->
                             'r list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val sexp_of_key :
                            ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                          val clear : ('a, 'b) t_ -> unit
                          val copy : ('a, 'b) t_ -> ('a, 'b) t_
                          val invariant : ('a, 'b) t_ -> unit
                          val fold :
                            ('a, 'b) t_ ->
                            init:'->
                            f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                          val iter :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> unit) -> unit
                          val existsi :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val for_alli :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val length : ('a, 'b) t_ -> int
                          val is_empty : ('a, 'b) t_ -> bool
                          val mem : ('a, 'b) t_ -> 'a key_ -> bool
                          val remove : ('a, 'b) t_ -> 'a key_ -> unit
                          val remove_one :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val replace :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val set :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val add :
                            ('a, 'b) t_ ->
                            key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                          val add_exn :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val change :
                            ('a, 'b) t_ ->
                            'a key_ -> ('b option -> 'b option) -> unit
                          val add_multi :
                            ('a, 'b list) t_ ->
                            key:'a key_ -> data:'-> unit
                          val remove_multi :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val map :
                            ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_map :
                            ('c,
                             ('a, 'b) t_ ->
                             f:('-> 'c option) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c option) ->
                             ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter :
                            ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                          val filteri :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                          val partition_map :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:('-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_mapi :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:(key:'a key_ ->
                                 data:'-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_tf :
                            ('a, 'b) t_ ->
                            f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                          val partitioni_tf :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) ->
                            ('a, 'b) t_ * ('a, 'b) t_
                          val find_or_add :
                            ('a, 'b) t_ ->
                            'a key_ -> default:(unit -> 'b) -> 'b
                          val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                          val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                          val find_and_remove :
                            ('a, 'b) t_ -> 'a key_ -> 'b option
                          val iter_vals :
                            ('a, 'b) t_ -> f:('-> unit) -> unit
                          val merge :
                            ('c,
                             ('k, 'a) t_ ->
                             ('k, 'b) t_ ->
                             f:(key:'k key_ ->
                                [ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] -> 'c option) ->
                             ('k, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val merge_into :
                            f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                            src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                          val keys : ('a, 'b) t_ -> 'a key_ list
                          val data : ('a, 'b) t_ -> 'b list
                          val filter_inplace :
                            ('a, 'b) t_ -> f:('-> bool) -> unit
                          val filteri_inplace :
                            ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                          val equal :
                            ('a, 'b) t_ ->
                            ('a, 'b) t_ -> ('-> '-> bool) -> bool
                          val similar :
                            ('a, 'b1) t_ ->
                            ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                          val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                          val validate :
                            name:('a key_ -> string) ->
                            'Core_kernel.Validate.check ->
                            ('a, 'b) t_ Core_kernel.Validate.check
                          val incr :
                            ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Pooled_hashtbl :
                        sig
                          type key = t
                          type ('a, 'b) hashtbl =
                              ('a, 'b) Core_kernel.Pooled_hashtbl.t
                          type 'b t = (key, 'b) hashtbl
                          type ('a, 'b) t_ = 'b t
                          type 'a key_ = key
                          val hashable :
                            key Core_kernel.Core_hashtbl_intf.Hashable.t
                          val create :
                            ('a key_, 'b, unit -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_report_all_dups :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_or_error :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             ('a, 'b) t_ Core_kernel.Or_error.t)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_exn :
                            ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_multi :
                            ('a key_, 'b list,
                             ('a key_ * 'b) list -> ('a, 'b list) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_mapped :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'r) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key_exn :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list -> ('a, 'r) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val group :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             combine:('-> '-> 'b) ->
                             'r list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val sexp_of_key :
                            ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                          val clear : ('a, 'b) t_ -> unit
                          val copy : ('a, 'b) t_ -> ('a, 'b) t_
                          val invariant : ('a, 'b) t_ -> unit
                          val fold :
                            ('a, 'b) t_ ->
                            init:'->
                            f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                          val iter :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> unit) -> unit
                          val existsi :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val for_alli :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val length : ('a, 'b) t_ -> int
                          val is_empty : ('a, 'b) t_ -> bool
                          val mem : ('a, 'b) t_ -> 'a key_ -> bool
                          val remove : ('a, 'b) t_ -> 'a key_ -> unit
                          val remove_one :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val replace :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val set :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val add :
                            ('a, 'b) t_ ->
                            key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                          val add_exn :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val change :
                            ('a, 'b) t_ ->
                            'a key_ -> ('b option -> 'b option) -> unit
                          val add_multi :
                            ('a, 'b list) t_ ->
                            key:'a key_ -> data:'-> unit
                          val remove_multi :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val map :
                            ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_map :
                            ('c,
                             ('a, 'b) t_ ->
                             f:('-> 'c option) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c option) ->
                             ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter :
                            ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                          val filteri :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                          val partition_map :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:('-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_mapi :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:(key:'a key_ ->
                                 data:'-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_tf :
                            ('a, 'b) t_ ->
                            f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                          val partitioni_tf :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) ->
                            ('a, 'b) t_ * ('a, 'b) t_
                          val find_or_add :
                            ('a, 'b) t_ ->
                            'a key_ -> default:(unit -> 'b) -> 'b
                          val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                          val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                          val find_and_remove :
                            ('a, 'b) t_ -> 'a key_ -> 'b option
                          val iter_vals :
                            ('a, 'b) t_ -> f:('-> unit) -> unit
                          val merge :
                            ('c,
                             ('k, 'a) t_ ->
                             ('k, 'b) t_ ->
                             f:(key:'k key_ ->
                                [ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] -> 'c option) ->
                             ('k, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val merge_into :
                            f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                            src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                          val keys : ('a, 'b) t_ -> 'a key_ list
                          val data : ('a, 'b) t_ -> 'b list
                          val filter_inplace :
                            ('a, 'b) t_ -> f:('-> bool) -> unit
                          val filteri_inplace :
                            ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                          val equal :
                            ('a, 'b) t_ ->
                            ('a, 'b) t_ -> ('-> '-> bool) -> bool
                          val similar :
                            ('a, 'b1) t_ ->
                            ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                          val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                          val validate :
                            name:('a key_ -> string) ->
                            'Core_kernel.Validate.check ->
                            ('a, 'b) t_ Core_kernel.Validate.check
                          val incr :
                            ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Hash_set :
                        sig
                          type elt = t
                          type 'a hash_set = 'Core_kernel.Hash_set.t
                          type t = elt hash_set
                          type 'a t_ = t
                          type 'a elt_ = elt
                          val create :
                            ('a, unit -> 'a t_)
                            Core_kernel.Hash_set_intf.create_options_without_hashable
                          val of_list :
                            ('a, 'a elt_ list -> 'a t_)
                            Core_kernel.Hash_set_intf.create_options_without_hashable
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val bin_size_t : t Bin_prot.Size.sizer
                          val bin_write_t : t Bin_prot.Write.writer
                          val bin_read_t : t Bin_prot.Read.reader
                          val __bin_read_t__ :
                            (int -> t) Bin_prot.Read.reader
                          val bin_writer_t : t Bin_prot.Type_class.writer
                          val bin_reader_t : t Bin_prot.Type_class.reader
                          val bin_t : t Bin_prot.Type_class.t
                        end
                      module Hash_queue :
                        sig
                          module Key :
                            sig
                              type t = t
                              val hash : t -> int
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                              val compare : t -> t -> int
                            end
                          type 'a t = 'Block.Commit.Key.Hash_queue.t
                          val length : 'a t -> int
                          val is_empty : 'a t -> bool
                          val iter : 'a t -> f:('-> unit) -> unit
                          val fold :
                            'a t ->
                            init:'accum ->
                            f:('accum -> '-> 'accum) -> 'accum
                          val exists : 'a t -> f:('-> bool) -> bool
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val count : 'a t -> f:('-> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            'a t -> f:('-> 'sum) -> 'sum
                          val find : 'a t -> f:('-> bool) -> 'a option
                          val find_map :
                            'a t -> f:('-> 'b option) -> 'b option
                          val to_list : 'a t -> 'a list
                          val to_array : 'a t -> 'a array
                          val min_elt :
                            'a t -> cmp:('-> '-> int) -> 'a option
                          val max_elt :
                            'a t -> cmp:('-> '-> int) -> 'a option
                          val invariant : 'a t -> unit
                          val create : unit -> 'a t
                          val clear : 'a t -> unit
                          val mem : 'a t -> Key.t -> bool
                          val lookup : 'a t -> Key.t -> 'a option
                          val lookup_exn : 'a t -> Key.t -> 'a
                          val enqueue :
                            'a t ->
                            Key.t -> '-> [ `Key_already_present | `Ok ]
                          val enqueue_exn : 'a t -> Key.t -> '-> unit
                          val first : 'a t -> 'a option
                          val keys : 'a t -> Key.t list
                          val dequeue : 'a t -> 'a option
                          val dequeue_exn : 'a t -> 'a
                          val dequeue_with_key : 'a t -> (Key.t * 'a) option
                          val dequeue_with_key_exn : 'a t -> Key.t * 'a
                          val dequeue_all : 'a t -> f:('-> unit) -> unit
                          val remove :
                            'a t -> Key.t -> [ `No_such_key | `Ok ]
                          val remove_exn : 'a t -> Key.t -> unit
                          val replace :
                            'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                          val replace_exn : 'a t -> Key.t -> '-> unit
                          val iteri :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val foldi :
                            'a t ->
                            init:'->
                            f:('-> key:Key.t -> data:'-> 'b) -> 'b
                        end
                      val pp : Format.formatter -> t -> unit
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val bin_t : t Bin_prot.Type_class.t
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val of_json : Ezjsonm.t -> t
                      val to_json : t -> Ezjsonm.t
                      val of_raw : string -> t
                      val to_raw : t -> string
                      val of_bytes : Core_kernel.Std.Bigstring.t -> t
                      val of_bytes' : string -> t
                    end
                  module Value :
                    sig
                      type key = key
                      type t = key IrminCommit.t
                      val of_string : string -> t
                      val to_string : t -> string
                      val ( >= ) : t -> t -> bool
                      val ( <= ) : t -> t -> bool
                      val ( = ) : t -> t -> bool
                      val ( > ) : t -> t -> bool
                      val ( < ) : t -> t -> bool
                      val ( <> ) : t -> t -> bool
                      val equal : t -> t -> bool
                      val compare : t -> t -> int
                      val min : t -> t -> t
                      val max : t -> t -> t
                      val ascending : t -> t -> int
                      val descending : t -> t -> int
                      val between : t -> low:t -> high:t -> bool
                      module Replace_polymorphic_compare :
                        sig
                          val ( >= ) : t -> t -> bool
                          val ( <= ) : t -> t -> bool
                          val ( = ) : t -> t -> bool
                          val ( > ) : t -> t -> bool
                          val ( < ) : t -> t -> bool
                          val ( <> ) : t -> t -> bool
                          val equal : t -> t -> bool
                          val compare : t -> t -> int
                          val min : t -> t -> t
                          val max : t -> t -> t
                          val _squelch_unused_module_warning_ : unit
                        end
                      type comparator_witness =
                          Block.Commit.Value.comparator_witness
                      val validate_lbound :
                        min:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val validate_ubound :
                        max:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val validate_bound :
                        min:t Core_kernel.Comparable_intf.bound ->
                        max:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                      module Map :
                        sig
                          module Key :
                            sig
                              type t = t
                              type comparator_witness = comparator_witness
                              val comparator :
                                (t, comparator_witness)
                                Core_kernel.Comparator.comparator
                            end
                          module Tree :
                            sig
                              type 'a t =
                                  (Key.t, 'a, Key.comparator_witness)
                                  Core_kernel.Core_map.Tree.t
                              val empty : 'a t
                              val singleton : Key.t -> '-> 'a t
                              val of_alist :
                                (Key.t * 'a) list ->
                                [ `Duplicate_key of Key.t | `Ok of 'a t ]
                              val of_alist_or_error :
                                (Key.t * 'a) list ->
                                'a t Core_kernel.Or_error.t
                              val of_alist_exn : (Key.t * 'a) list -> 'a t
                              val of_alist_multi :
                                (Key.t * 'a) list -> 'a list t
                              val of_alist_fold :
                                (Key.t * 'a) list ->
                                init:'-> f:('-> '-> 'b) -> 'b t
                              val of_alist_reduce :
                                (Key.t * 'a) list ->
                                f:('-> '-> 'a) -> 'a t
                              val of_sorted_array :
                                (Key.t * 'a) array ->
                                'a t Core_kernel.Or_error.t
                              val of_sorted_array_unchecked :
                                (Key.t * 'a) array -> 'a t
                              val of_tree : 'a t -> 'a t
                              val invariants : 'a t -> bool
                              val is_empty : 'a t -> bool
                              val length : 'a t -> int
                              val add : 'a t -> key:Key.t -> data:'-> 'a t
                              val add_multi :
                                'a list t ->
                                key:Key.t -> data:'-> 'a list t
                              val change :
                                'a t ->
                                Key.t -> ('a option -> 'a option) -> 'a t
                              val find : 'a t -> Key.t -> 'a option
                              val find_exn : 'a t -> Key.t -> 'a
                              val remove : 'a t -> Key.t -> 'a t
                              val mem : 'a t -> Key.t -> bool
                              val iter :
                                'a t ->
                                f:(key:Key.t -> data:'-> unit) -> unit
                              val iter2 :
                                'a t ->
                                'b t ->
                                f:(key:Key.t ->
                                   data:[ `Both of 'a * 'b
                                        | `Left of 'a
                                        | `Right of 'b ] ->
                                   unit) ->
                                unit
                              val map : 'a t -> f:('-> 'b) -> 'b t
                              val mapi :
                                'a t ->
                                f:(key:Key.t -> data:'-> 'b) -> 'b t
                              val fold :
                                'a t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val fold_right :
                                'a t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val filter :
                                'a t ->
                                f:(key:Key.t -> data:'-> bool) -> 'a t
                              val filter_map :
                                'a t -> f:('-> 'b option) -> 'b t
                              val filter_mapi :
                                'a t ->
                                f:(key:Key.t -> data:'-> 'b option) -> 'b t
                              val compare_direct :
                                ('-> '-> int) -> 'a t -> 'a t -> int
                              val equal :
                                ('-> '-> bool) -> 'a t -> 'a t -> bool
                              val keys : 'a t -> Key.t list
                              val data : 'a t -> 'a list
                              val to_alist : 'a t -> (Key.t * 'a) list
                              val validate :
                                name:(Key.t -> string) ->
                                'Core_kernel.Validate.check ->
                                'a t Core_kernel.Validate.check
                              val merge :
                                'a t ->
                                'b t ->
                                f:(key:Key.t ->
                                   [ `Both of 'a * 'b
                                   | `Left of 'a
                                   | `Right of 'b ] -> 'c option) ->
                                'c t
                              val symmetric_diff :
                                'a t ->
                                'a t ->
                                data_equal:('-> '-> bool) ->
                                (Key.t *
                                 [ `Left of 'a
                                 | `Right of 'a
                                 | `Unequal of 'a * 'a ])
                                Core_kernel.Sequence.t
                              val min_elt : 'a t -> (Key.t * 'a) option
                              val min_elt_exn : 'a t -> Key.t * 'a
                              val max_elt : 'a t -> (Key.t * 'a) option
                              val max_elt_exn : 'a t -> Key.t * 'a
                              val for_all : 'a t -> f:('-> bool) -> bool
                              val exists : 'a t -> f:('-> bool) -> bool
                              val fold_range_inclusive :
                                'a t ->
                                min:Key.t ->
                                max:Key.t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val range_to_alist :
                                'a t ->
                                min:Key.t -> max:Key.t -> (Key.t * 'a) list
                              val prev_key :
                                'a t -> Key.t -> (Key.t * 'a) option
                              val next_key :
                                'a t -> Key.t -> (Key.t * 'a) option
                              val rank : 'a t -> Key.t -> int option
                              val to_tree : 'a t -> 'a t
                              val to_sequence :
                                ?keys_in:[ `Decreasing_order
                                         | `Decreasing_order_less_than_or_equal_to of
                                             Key.t
                                         | `Increasing_order
                                         | `Increasing_order_greater_than_or_equal_to of
                                             Key.t ] ->
                                'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                              val t_of_sexp :
                                (Sexplib.Sexp.t -> 'a) ->
                                Sexplib.Sexp.t -> 'a t
                              val sexp_of_t :
                                ('-> Sexplib.Sexp.t) ->
                                'a t -> Sexplib.Sexp.t
                            end
                          type 'a t =
                              (Key.t, 'a, Key.comparator_witness)
                              Core_kernel.Core_map.t
                          val empty : 'a t
                          val singleton : Key.t -> '-> 'a t
                          val of_alist :
                            (Key.t * 'a) list ->
                            [ `Duplicate_key of Key.t | `Ok of 'a t ]
                          val of_alist_or_error :
                            (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                          val of_alist_exn : (Key.t * 'a) list -> 'a t
                          val of_alist_multi : (Key.t * 'a) list -> 'a list t
                          val of_alist_fold :
                            (Key.t * 'a) list ->
                            init:'-> f:('-> '-> 'b) -> 'b t
                          val of_alist_reduce :
                            (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                          val of_sorted_array :
                            (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked :
                            (Key.t * 'a) array -> 'a t
                          val of_tree : 'Tree.t -> 'a t
                          val invariants : 'a t -> bool
                          val is_empty : 'a t -> bool
                          val length : 'a t -> int
                          val add : 'a t -> key:Key.t -> data:'-> 'a t
                          val add_multi :
                            'a list t -> key:Key.t -> data:'-> 'a list t
                          val change :
                            'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                          val find : 'a t -> Key.t -> 'a option
                          val find_exn : 'a t -> Key.t -> 'a
                          val remove : 'a t -> Key.t -> 'a t
                          val mem : 'a t -> Key.t -> bool
                          val iter :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val iter2 :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               data:[ `Both of 'a * 'b
                                    | `Left of 'a
                                    | `Right of 'b ] ->
                               unit) ->
                            unit
                          val map : 'a t -> f:('-> 'b) -> 'b t
                          val mapi :
                            'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                          val fold :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val fold_right :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val filter :
                            'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                          val filter_map :
                            'a t -> f:('-> 'b option) -> 'b t
                          val filter_mapi :
                            'a t ->
                            f:(key:Key.t -> data:'-> 'b option) -> 'b t
                          val compare_direct :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val equal :
                            ('-> '-> bool) -> 'a t -> 'a t -> bool
                          val keys : 'a t -> Key.t list
                          val data : 'a t -> 'a list
                          val to_alist : 'a t -> (Key.t * 'a) list
                          val validate :
                            name:(Key.t -> string) ->
                            'Core_kernel.Validate.check ->
                            'a t Core_kernel.Validate.check
                          val merge :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            'c t
                          val symmetric_diff :
                            'a t ->
                            'a t ->
                            data_equal:('-> '-> bool) ->
                            (Key.t *
                             [ `Left of 'a
                             | `Right of 'a
                             | `Unequal of 'a * 'a ])
                            Core_kernel.Sequence.t
                          val min_elt : 'a t -> (Key.t * 'a) option
                          val min_elt_exn : 'a t -> Key.t * 'a
                          val max_elt : 'a t -> (Key.t * 'a) option
                          val max_elt_exn : 'a t -> Key.t * 'a
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val exists : 'a t -> f:('-> bool) -> bool
                          val fold_range_inclusive :
                            'a t ->
                            min:Key.t ->
                            max:Key.t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val range_to_alist :
                            'a t ->
                            min:Key.t -> max:Key.t -> (Key.t * 'a) list
                          val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val rank : 'a t -> Key.t -> int option
                          val to_tree : 'a t -> 'Tree.t
                          val to_sequence :
                            ?keys_in:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Key.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Key.t ] ->
                            'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                          val compare :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Set :
                        sig
                          module Elt :
                            sig
                              type t = t
                              type comparator_witness = comparator_witness
                              val comparator :
                                (t, comparator_witness)
                                Core_kernel.Comparator.comparator
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                            end
                          module Tree :
                            sig
                              type t =
                                  (Elt.t, Elt.comparator_witness)
                                  Core_kernel.Core_set.Tree.t
                              val length : t -> int
                              val is_empty : t -> bool
                              val iter : t -> f:(Elt.t -> unit) -> unit
                              val fold :
                                t ->
                                init:'accum ->
                                f:('accum -> Elt.t -> 'accum) -> 'accum
                              val exists : t -> f:(Elt.t -> bool) -> bool
                              val for_all : t -> f:(Elt.t -> bool) -> bool
                              val count : t -> f:(Elt.t -> bool) -> int
                              val sum :
                                (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                                t -> f:(Elt.t -> 'sum) -> 'sum
                              val find :
                                t -> f:(Elt.t -> bool) -> Elt.t option
                              val find_map :
                                t -> f:(Elt.t -> 'a option) -> 'a option
                              val to_list : t -> Elt.t list
                              val to_array : t -> Elt.t array
                              val invariants : t -> bool
                              val mem : t -> Elt.t -> bool
                              val add : t -> Elt.t -> t
                              val remove : t -> Elt.t -> t
                              val union : t -> t -> t
                              val inter : t -> t -> t
                              val diff : t -> t -> t
                              val compare_direct : t -> t -> int
                              val equal : t -> t -> bool
                              val subset : t -> t -> bool
                              val fold_until :
                                t ->
                                init:'->
                                f:('->
                                   Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                                'b
                              val fold_right :
                                t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                              val iter2 :
                                t ->
                                t ->
                                f:([ `Both of Elt.t * Elt.t
                                   | `Left of Elt.t
                                   | `Right of Elt.t ] -> unit) ->
                                unit
                              val filter : t -> f:(Elt.t -> bool) -> t
                              val partition_tf :
                                t -> f:(Elt.t -> bool) -> t * t
                              val elements : t -> Elt.t list
                              val min_elt : t -> Elt.t option
                              val min_elt_exn : t -> Elt.t
                              val max_elt : t -> Elt.t option
                              val max_elt_exn : t -> Elt.t
                              val choose : t -> Elt.t option
                              val choose_exn : t -> Elt.t
                              val split : t -> Elt.t -> t * bool * t
                              val group_by :
                                t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                              val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                              val find_index : t -> int -> Elt.t option
                              val remove_index : t -> int -> t
                              val to_tree : t -> t
                              val to_sequence :
                                ?in_:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Elt.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Elt.t ] ->
                                t -> Elt.t Core_kernel.Sequence.t
                              val to_map :
                                t ->
                                f:(Elt.t -> 'data) ->
                                (Elt.t, 'data, Elt.comparator_witness)
                                Core_kernel.Core_set_intf.Map.t
                              val empty : t
                              val singleton : Elt.t -> t
                              val union_list : t list -> t
                              val of_list : Elt.t list -> t
                              val of_array : Elt.t array -> t
                              val of_sorted_array :
                                Elt.t array -> t Core_kernel.Or_error.t
                              val of_sorted_array_unchecked :
                                Elt.t array -> t
                              val stable_dedup_list :
                                Elt.t list -> Elt.t list
                              val map :
                                ('a, 'b) Core_kernel.Core_set.Tree.t ->
                                f:('-> Elt.t) -> t
                              val filter_map :
                                ('a, 'b) Core_kernel.Core_set.Tree.t ->
                                f:('-> Elt.t option) -> t
                              val of_tree : t -> t
                              val of_map_keys :
                                (Elt.t, 'a, Elt.comparator_witness)
                                Core_kernel.Core_set_intf.Map.t -> t
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                              val compare : t -> t -> int
                            end
                          type t =
                              (Elt.t, Elt.comparator_witness)
                              Core_kernel.Core_set.t
                          val length : t -> int
                          val is_empty : t -> bool
                          val iter : t -> f:(Elt.t -> unit) -> unit
                          val fold :
                            t ->
                            init:'accum ->
                            f:('accum -> Elt.t -> 'accum) -> 'accum
                          val exists : t -> f:(Elt.t -> bool) -> bool
                          val for_all : t -> f:(Elt.t -> bool) -> bool
                          val count : t -> f:(Elt.t -> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            t -> f:(Elt.t -> 'sum) -> 'sum
                          val find : t -> f:(Elt.t -> bool) -> Elt.t option
                          val find_map :
                            t -> f:(Elt.t -> 'a option) -> 'a option
                          val to_list : t -> Elt.t list
                          val to_array : t -> Elt.t array
                          val invariants : t -> bool
                          val mem : t -> Elt.t -> bool
                          val add : t -> Elt.t -> t
                          val remove : t -> Elt.t -> t
                          val union : t -> t -> t
                          val inter : t -> t -> t
                          val diff : t -> t -> t
                          val compare_direct : t -> t -> int
                          val equal : t -> t -> bool
                          val subset : t -> t -> bool
                          val fold_until :
                            t ->
                            init:'->
                            f:('->
                               Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                            'b
                          val fold_right :
                            t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                          val iter2 :
                            t ->
                            t ->
                            f:([ `Both of Elt.t * Elt.t
                               | `Left of Elt.t
                               | `Right of Elt.t ] -> unit) ->
                            unit
                          val filter : t -> f:(Elt.t -> bool) -> t
                          val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                          val elements : t -> Elt.t list
                          val min_elt : t -> Elt.t option
                          val min_elt_exn : t -> Elt.t
                          val max_elt : t -> Elt.t option
                          val max_elt_exn : t -> Elt.t
                          val choose : t -> Elt.t option
                          val choose_exn : t -> Elt.t
                          val split : t -> Elt.t -> t * bool * t
                          val group_by :
                            t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                          val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                          val find_index : t -> int -> Elt.t option
                          val remove_index : t -> int -> t
                          val to_tree : t -> Tree.t
                          val to_sequence :
                            ?in_:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Elt.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Elt.t ] ->
                            t -> Elt.t Core_kernel.Sequence.t
                          val to_map :
                            t ->
                            f:(Elt.t -> 'data) ->
                            (Elt.t, 'data, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t
                          val empty : t
                          val singleton : Elt.t -> t
                          val union_list : t list -> t
                          val of_list : Elt.t list -> t
                          val of_array : Elt.t array -> t
                          val of_sorted_array :
                            Elt.t array -> t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked : Elt.t array -> t
                          val stable_dedup_list : Elt.t list -> Elt.t list
                          val map :
                            ('a, 'b) Core_kernel.Core_set.t ->
                            f:('-> Elt.t) -> t
                          val filter_map :
                            ('a, 'b) Core_kernel.Core_set.t ->
                            f:('-> Elt.t option) -> t
                          val of_tree : Tree.t -> t
                          val of_map_keys :
                            (Elt.t, 'a, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t -> t
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                          val bin_size_t : t Bin_prot.Size.sizer
                          val bin_write_t : t Bin_prot.Write.writer
                          val bin_read_t : t Bin_prot.Read.reader
                          val __bin_read_t__ :
                            (int -> t) Bin_prot.Read.reader
                          val bin_writer_t : t Bin_prot.Type_class.writer
                          val bin_reader_t : t Bin_prot.Type_class.reader
                          val bin_t : t Bin_prot.Type_class.t
                        end
                      module Hashable : sig type t = t end
                      val hash : t -> int
                      val hashable :
                        t Core_kernel.Hashable.Hashtbl.Hashable.t
                      module Table :
                        sig
                          type key = t
                          type ('a, 'b) hashtbl =
                              ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                          type 'b t = (key, 'b) hashtbl
                          type ('a, 'b) t_ = 'b t
                          type 'a key_ = key
                          val hashable :
                            key Core_kernel.Core_hashtbl_intf.Hashable.t
                          val create :
                            ('a key_, 'b, unit -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_report_all_dups :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_or_error :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             ('a, 'b) t_ Core_kernel.Or_error.t)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_exn :
                            ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_multi :
                            ('a key_, 'b list,
                             ('a key_ * 'b) list -> ('a, 'b list) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_mapped :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'r) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key_exn :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list -> ('a, 'r) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val group :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             combine:('-> '-> 'b) ->
                             'r list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val sexp_of_key :
                            ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                          val clear : ('a, 'b) t_ -> unit
                          val copy : ('a, 'b) t_ -> ('a, 'b) t_
                          val invariant : ('a, 'b) t_ -> unit
                          val fold :
                            ('a, 'b) t_ ->
                            init:'->
                            f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                          val iter :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> unit) -> unit
                          val existsi :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val for_alli :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val length : ('a, 'b) t_ -> int
                          val is_empty : ('a, 'b) t_ -> bool
                          val mem : ('a, 'b) t_ -> 'a key_ -> bool
                          val remove : ('a, 'b) t_ -> 'a key_ -> unit
                          val remove_one :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val replace :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val set :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val add :
                            ('a, 'b) t_ ->
                            key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                          val add_exn :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val change :
                            ('a, 'b) t_ ->
                            'a key_ -> ('b option -> 'b option) -> unit
                          val add_multi :
                            ('a, 'b list) t_ ->
                            key:'a key_ -> data:'-> unit
                          val remove_multi :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val map :
                            ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_map :
                            ('c,
                             ('a, 'b) t_ ->
                             f:('-> 'c option) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c option) ->
                             ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter :
                            ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                          val filteri :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                          val partition_map :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:('-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_mapi :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:(key:'a key_ ->
                                 data:'-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_tf :
                            ('a, 'b) t_ ->
                            f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                          val partitioni_tf :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) ->
                            ('a, 'b) t_ * ('a, 'b) t_
                          val find_or_add :
                            ('a, 'b) t_ ->
                            'a key_ -> default:(unit -> 'b) -> 'b
                          val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                          val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                          val find_and_remove :
                            ('a, 'b) t_ -> 'a key_ -> 'b option
                          val iter_vals :
                            ('a, 'b) t_ -> f:('-> unit) -> unit
                          val merge :
                            ('c,
                             ('k, 'a) t_ ->
                             ('k, 'b) t_ ->
                             f:(key:'k key_ ->
                                [ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] -> 'c option) ->
                             ('k, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val merge_into :
                            f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                            src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                          val keys : ('a, 'b) t_ -> 'a key_ list
                          val data : ('a, 'b) t_ -> 'b list
                          val filter_inplace :
                            ('a, 'b) t_ -> f:('-> bool) -> unit
                          val filteri_inplace :
                            ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                          val equal :
                            ('a, 'b) t_ ->
                            ('a, 'b) t_ -> ('-> '-> bool) -> bool
                          val similar :
                            ('a, 'b1) t_ ->
                            ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                          val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                          val validate :
                            name:('a key_ -> string) ->
                            'Core_kernel.Validate.check ->
                            ('a, 'b) t_ Core_kernel.Validate.check
                          val incr :
                            ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Pooled_hashtbl :
                        sig
                          type key = t
                          type ('a, 'b) hashtbl =
                              ('a, 'b) Core_kernel.Pooled_hashtbl.t
                          type 'b t = (key, 'b) hashtbl
                          type ('a, 'b) t_ = 'b t
                          type 'a key_ = key
                          val hashable :
                            key Core_kernel.Core_hashtbl_intf.Hashable.t
                          val create :
                            ('a key_, 'b, unit -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_report_all_dups :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_or_error :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             ('a, 'b) t_ Core_kernel.Or_error.t)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_exn :
                            ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_multi :
                            ('a key_, 'b list,
                             ('a key_ * 'b) list -> ('a, 'b list) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_mapped :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'r) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key_exn :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list -> ('a, 'r) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val group :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             combine:('-> '-> 'b) ->
                             'r list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val sexp_of_key :
                            ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                          val clear : ('a, 'b) t_ -> unit
                          val copy : ('a, 'b) t_ -> ('a, 'b) t_
                          val invariant : ('a, 'b) t_ -> unit
                          val fold :
                            ('a, 'b) t_ ->
                            init:'->
                            f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                          val iter :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> unit) -> unit
                          val existsi :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val for_alli :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val length : ('a, 'b) t_ -> int
                          val is_empty : ('a, 'b) t_ -> bool
                          val mem : ('a, 'b) t_ -> 'a key_ -> bool
                          val remove : ('a, 'b) t_ -> 'a key_ -> unit
                          val remove_one :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val replace :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val set :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val add :
                            ('a, 'b) t_ ->
                            key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                          val add_exn :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val change :
                            ('a, 'b) t_ ->
                            'a key_ -> ('b option -> 'b option) -> unit
                          val add_multi :
                            ('a, 'b list) t_ ->
                            key:'a key_ -> data:'-> unit
                          val remove_multi :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val map :
                            ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_map :
                            ('c,
                             ('a, 'b) t_ ->
                             f:('-> 'c option) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c option) ->
                             ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter :
                            ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                          val filteri :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                          val partition_map :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:('-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_mapi :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:(key:'a key_ ->
                                 data:'-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_tf :
                            ('a, 'b) t_ ->
                            f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                          val partitioni_tf :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) ->
                            ('a, 'b) t_ * ('a, 'b) t_
                          val find_or_add :
                            ('a, 'b) t_ ->
                            'a key_ -> default:(unit -> 'b) -> 'b
                          val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                          val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                          val find_and_remove :
                            ('a, 'b) t_ -> 'a key_ -> 'b option
                          val iter_vals :
                            ('a, 'b) t_ -> f:('-> unit) -> unit
                          val merge :
                            ('c,
                             ('k, 'a) t_ ->
                             ('k, 'b) t_ ->
                             f:(key:'k key_ ->
                                [ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] -> 'c option) ->
                             ('k, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val merge_into :
                            f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                            src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                          val keys : ('a, 'b) t_ -> 'a key_ list
                          val data : ('a, 'b) t_ -> 'b list
                          val filter_inplace :
                            ('a, 'b) t_ -> f:('-> bool) -> unit
                          val filteri_inplace :
                            ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                          val equal :
                            ('a, 'b) t_ ->
                            ('a, 'b) t_ -> ('-> '-> bool) -> bool
                          val similar :
                            ('a, 'b1) t_ ->
                            ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                          val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                          val validate :
                            name:('a key_ -> string) ->
                            'Core_kernel.Validate.check ->
                            ('a, 'b) t_ Core_kernel.Validate.check
                          val incr :
                            ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Hash_set :
                        sig
                          type elt = t
                          type 'a hash_set = 'Core_kernel.Hash_set.t
                          type t = elt hash_set
                          type 'a t_ = t
                          type 'a elt_ = elt
                          val create :
                            ('a, unit -> 'a t_)
                            Core_kernel.Hash_set_intf.create_options_without_hashable
                          val of_list :
                            ('a, 'a elt_ list -> 'a t_)
                            Core_kernel.Hash_set_intf.create_options_without_hashable
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val bin_size_t : t Bin_prot.Size.sizer
                          val bin_write_t : t Bin_prot.Write.writer
                          val bin_read_t : t Bin_prot.Read.reader
                          val __bin_read_t__ :
                            (int -> t) Bin_prot.Read.reader
                          val bin_writer_t : t Bin_prot.Type_class.writer
                          val bin_reader_t : t Bin_prot.Type_class.reader
                          val bin_t : t Bin_prot.Type_class.t
                        end
                      module Hash_queue :
                        sig
                          module Key :
                            sig
                              type t = t
                              val hash : t -> int
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                              val compare : t -> t -> int
                            end
                          type 'a t = 'Block.Commit.Value.Hash_queue.t
                          val length : 'a t -> int
                          val is_empty : 'a t -> bool
                          val iter : 'a t -> f:('-> unit) -> unit
                          val fold :
                            'a t ->
                            init:'accum ->
                            f:('accum -> '-> 'accum) -> 'accum
                          val exists : 'a t -> f:('-> bool) -> bool
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val count : 'a t -> f:('-> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            'a t -> f:('-> 'sum) -> 'sum
                          val find : 'a t -> f:('-> bool) -> 'a option
                          val find_map :
                            'a t -> f:('-> 'b option) -> 'b option
                          val to_list : 'a t -> 'a list
                          val to_array : 'a t -> 'a array
                          val min_elt :
                            'a t -> cmp:('-> '-> int) -> 'a option
                          val max_elt :
                            'a t -> cmp:('-> '-> int) -> 'a option
                          val invariant : 'a t -> unit
                          val create : unit -> 'a t
                          val clear : 'a t -> unit
                          val mem : 'a t -> Key.t -> bool
                          val lookup : 'a t -> Key.t -> 'a option
                          val lookup_exn : 'a t -> Key.t -> 'a
                          val enqueue :
                            'a t ->
                            Key.t -> '-> [ `Key_already_present | `Ok ]
                          val enqueue_exn : 'a t -> Key.t -> '-> unit
                          val first : 'a t -> 'a option
                          val keys : 'a t -> Key.t list
                          val dequeue : 'a t -> 'a option
                          val dequeue_exn : 'a t -> 'a
                          val dequeue_with_key : 'a t -> (Key.t * 'a) option
                          val dequeue_with_key_exn : 'a t -> Key.t * 'a
                          val dequeue_all : 'a t -> f:('-> unit) -> unit
                          val remove :
                            'a t -> Key.t -> [ `No_such_key | `Ok ]
                          val remove_exn : 'a t -> Key.t -> unit
                          val replace :
                            'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                          val replace_exn : 'a t -> Key.t -> '-> unit
                          val iteri :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val foldi :
                            'a t ->
                            init:'->
                            f:('-> key:Key.t -> data:'-> 'b) -> 'b
                        end
                      val pp : Format.formatter -> t -> unit
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val bin_t : t Bin_prot.Type_class.t
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val of_json : Ezjsonm.t -> t
                      val to_json : t -> Ezjsonm.t
                      val merge : t IrminMerge.t
                    end
                end
              val contents_t : t -> Contents.t
              val node_t : t -> Node.t
              val commit_t : t -> Commit.t
              val merge : t -> key IrminMerge.t
              module Key :
                sig
                  type t = key
                  val of_string : string -> t
                  val to_string : t -> string
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val ascending : t -> t -> int
                  val descending : t -> t -> int
                  val between : t -> low:t -> high:t -> bool
                  module Replace_polymorphic_compare :
                    sig
                      val ( >= ) : t -> t -> bool
                      val ( <= ) : t -> t -> bool
                      val ( = ) : t -> t -> bool
                      val ( > ) : t -> t -> bool
                      val ( < ) : t -> t -> bool
                      val ( <> ) : t -> t -> bool
                      val equal : t -> t -> bool
                      val compare : t -> t -> int
                      val min : t -> t -> t
                      val max : t -> t -> t
                      val _squelch_unused_module_warning_ : unit
                    end
                  type comparator_witness = Block.Key.comparator_witness
                  val validate_lbound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_ubound :
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_bound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val comparator :
                    (t, comparator_witness) Core_kernel.Comparator.comparator
                  module Map :
                    sig
                      module Key :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                        end
                      module Tree :
                        sig
                          type 'a t =
                              (Key.t, 'a, Key.comparator_witness)
                              Core_kernel.Core_map.Tree.t
                          val empty : 'a t
                          val singleton : Key.t -> '-> 'a t
                          val of_alist :
                            (Key.t * 'a) list ->
                            [ `Duplicate_key of Key.t | `Ok of 'a t ]
                          val of_alist_or_error :
                            (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                          val of_alist_exn : (Key.t * 'a) list -> 'a t
                          val of_alist_multi : (Key.t * 'a) list -> 'a list t
                          val of_alist_fold :
                            (Key.t * 'a) list ->
                            init:'-> f:('-> '-> 'b) -> 'b t
                          val of_alist_reduce :
                            (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                          val of_sorted_array :
                            (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked :
                            (Key.t * 'a) array -> 'a t
                          val of_tree : 'a t -> 'a t
                          val invariants : 'a t -> bool
                          val is_empty : 'a t -> bool
                          val length : 'a t -> int
                          val add : 'a t -> key:Key.t -> data:'-> 'a t
                          val add_multi :
                            'a list t -> key:Key.t -> data:'-> 'a list t
                          val change :
                            'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                          val find : 'a t -> Key.t -> 'a option
                          val find_exn : 'a t -> Key.t -> 'a
                          val remove : 'a t -> Key.t -> 'a t
                          val mem : 'a t -> Key.t -> bool
                          val iter :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val iter2 :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               data:[ `Both of 'a * 'b
                                    | `Left of 'a
                                    | `Right of 'b ] ->
                               unit) ->
                            unit
                          val map : 'a t -> f:('-> 'b) -> 'b t
                          val mapi :
                            'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                          val fold :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val fold_right :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val filter :
                            'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                          val filter_map :
                            'a t -> f:('-> 'b option) -> 'b t
                          val filter_mapi :
                            'a t ->
                            f:(key:Key.t -> data:'-> 'b option) -> 'b t
                          val compare_direct :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val equal :
                            ('-> '-> bool) -> 'a t -> 'a t -> bool
                          val keys : 'a t -> Key.t list
                          val data : 'a t -> 'a list
                          val to_alist : 'a t -> (Key.t * 'a) list
                          val validate :
                            name:(Key.t -> string) ->
                            'Core_kernel.Validate.check ->
                            'a t Core_kernel.Validate.check
                          val merge :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            'c t
                          val symmetric_diff :
                            'a t ->
                            'a t ->
                            data_equal:('-> '-> bool) ->
                            (Key.t *
                             [ `Left of 'a
                             | `Right of 'a
                             | `Unequal of 'a * 'a ])
                            Core_kernel.Sequence.t
                          val min_elt : 'a t -> (Key.t * 'a) option
                          val min_elt_exn : 'a t -> Key.t * 'a
                          val max_elt : 'a t -> (Key.t * 'a) option
                          val max_elt_exn : 'a t -> Key.t * 'a
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val exists : 'a t -> f:('-> bool) -> bool
                          val fold_range_inclusive :
                            'a t ->
                            min:Key.t ->
                            max:Key.t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val range_to_alist :
                            'a t ->
                            min:Key.t -> max:Key.t -> (Key.t * 'a) list
                          val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val rank : 'a t -> Key.t -> int option
                          val to_tree : 'a t -> 'a t
                          val to_sequence :
                            ?keys_in:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Key.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Key.t ] ->
                            'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                        end
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'Tree.t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'Tree.t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Set :
                    sig
                      module Elt :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                        end
                      module Tree :
                        sig
                          type t =
                              (Elt.t, Elt.comparator_witness)
                              Core_kernel.Core_set.Tree.t
                          val length : t -> int
                          val is_empty : t -> bool
                          val iter : t -> f:(Elt.t -> unit) -> unit
                          val fold :
                            t ->
                            init:'accum ->
                            f:('accum -> Elt.t -> 'accum) -> 'accum
                          val exists : t -> f:(Elt.t -> bool) -> bool
                          val for_all : t -> f:(Elt.t -> bool) -> bool
                          val count : t -> f:(Elt.t -> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            t -> f:(Elt.t -> 'sum) -> 'sum
                          val find : t -> f:(Elt.t -> bool) -> Elt.t option
                          val find_map :
                            t -> f:(Elt.t -> 'a option) -> 'a option
                          val to_list : t -> Elt.t list
                          val to_array : t -> Elt.t array
                          val invariants : t -> bool
                          val mem : t -> Elt.t -> bool
                          val add : t -> Elt.t -> t
                          val remove : t -> Elt.t -> t
                          val union : t -> t -> t
                          val inter : t -> t -> t
                          val diff : t -> t -> t
                          val compare_direct : t -> t -> int
                          val equal : t -> t -> bool
                          val subset : t -> t -> bool
                          val fold_until :
                            t ->
                            init:'->
                            f:('->
                               Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                            'b
                          val fold_right :
                            t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                          val iter2 :
                            t ->
                            t ->
                            f:([ `Both of Elt.t * Elt.t
                               | `Left of Elt.t
                               | `Right of Elt.t ] -> unit) ->
                            unit
                          val filter : t -> f:(Elt.t -> bool) -> t
                          val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                          val elements : t -> Elt.t list
                          val min_elt : t -> Elt.t option
                          val min_elt_exn : t -> Elt.t
                          val max_elt : t -> Elt.t option
                          val max_elt_exn : t -> Elt.t
                          val choose : t -> Elt.t option
                          val choose_exn : t -> Elt.t
                          val split : t -> Elt.t -> t * bool * t
                          val group_by :
                            t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                          val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                          val find_index : t -> int -> Elt.t option
                          val remove_index : t -> int -> t
                          val to_tree : t -> t
                          val to_sequence :
                            ?in_:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Elt.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Elt.t ] ->
                            t -> Elt.t Core_kernel.Sequence.t
                          val to_map :
                            t ->
                            f:(Elt.t -> 'data) ->
                            (Elt.t, 'data, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t
                          val empty : t
                          val singleton : Elt.t -> t
                          val union_list : t list -> t
                          val of_list : Elt.t list -> t
                          val of_array : Elt.t array -> t
                          val of_sorted_array :
                            Elt.t array -> t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked : Elt.t array -> t
                          val stable_dedup_list : Elt.t list -> Elt.t list
                          val map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t) -> t
                          val filter_map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t option) -> t
                          val of_tree : t -> t
                          val of_map_keys :
                            (Elt.t, 'a, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t -> t
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> Tree.t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : Tree.t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hashable : sig type t = t end
                  val hash : t -> int
                  val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
                  module Table :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Pooled_hashtbl :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Pooled_hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Hash_set :
                    sig
                      type elt = t
                      type 'a hash_set = 'Core_kernel.Hash_set.t
                      type t = elt hash_set
                      type 'a t_ = t
                      type 'a elt_ = elt
                      val create :
                        ('a, unit -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val of_list :
                        ('a, 'a elt_ list -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hash_queue :
                    sig
                      module Key :
                        sig
                          type t = t
                          val hash : t -> int
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type 'a t = 'Block.Key.Hash_queue.t
                      val length : 'a t -> int
                      val is_empty : 'a t -> bool
                      val iter : 'a t -> f:('-> unit) -> unit
                      val fold :
                        'a t ->
                        init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                      val exists : 'a t -> f:('-> bool) -> bool
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val count : 'a t -> f:('-> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        'a t -> f:('-> 'sum) -> 'sum
                      val find : 'a t -> f:('-> bool) -> 'a option
                      val find_map : 'a t -> f:('-> 'b option) -> 'b option
                      val to_list : 'a t -> 'a list
                      val to_array : 'a t -> 'a array
                      val min_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val max_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val invariant : 'a t -> unit
                      val create : unit -> 'a t
                      val clear : 'a t -> unit
                      val mem : 'a t -> Key.t -> bool
                      val lookup : 'a t -> Key.t -> 'a option
                      val lookup_exn : 'a t -> Key.t -> 'a
                      val enqueue :
                        'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                      val enqueue_exn : 'a t -> Key.t -> '-> unit
                      val first : 'a t -> 'a option
                      val keys : 'a t -> Key.t list
                      val dequeue : 'a t -> 'a option
                      val dequeue_exn : 'a t -> 'a
                      val dequeue_with_key : 'a t -> (Key.t * 'a) option
                      val dequeue_with_key_exn : 'a t -> Key.t * 'a
                      val dequeue_all : 'a t -> f:('-> unit) -> unit
                      val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                      val remove_exn : 'a t -> Key.t -> unit
                      val replace :
                        'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                      val replace_exn : 'a t -> Key.t -> '-> unit
                      val iteri :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val foldi :
                        'a t ->
                        init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                    end
                  val pp : Format.formatter -> t -> unit
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_t : t Bin_prot.Type_class.t
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val of_json : Ezjsonm.t -> t
                  val to_json : t -> Ezjsonm.t
                  val of_raw : string -> t
                  val to_raw : t -> string
                  val of_bytes : Core_kernel.Std.Bigstring.t -> t
                  val of_bytes' : string -> t
                end
              module Value :
                sig
                  type key = key
                  type contents = contents
                  type t = (key, contents) IrminBlock.t
                  val of_string : string -> t
                  val to_string : t -> string
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val ascending : t -> t -> int
                  val descending : t -> t -> int
                  val between : t -> low:t -> high:t -> bool
                  module Replace_polymorphic_compare :
                    sig
                      val ( >= ) : t -> t -> bool
                      val ( <= ) : t -> t -> bool
                      val ( = ) : t -> t -> bool
                      val ( > ) : t -> t -> bool
                      val ( < ) : t -> t -> bool
                      val ( <> ) : t -> t -> bool
                      val equal : t -> t -> bool
                      val compare : t -> t -> int
                      val min : t -> t -> t
                      val max : t -> t -> t
                      val _squelch_unused_module_warning_ : unit
                    end
                  type comparator_witness = Block.Value.comparator_witness
                  val validate_lbound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_ubound :
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_bound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val comparator :
                    (t, comparator_witness) Core_kernel.Comparator.comparator
                  module Map :
                    sig
                      module Key :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                        end
                      module Tree :
                        sig
                          type 'a t =
                              (Key.t, 'a, Key.comparator_witness)
                              Core_kernel.Core_map.Tree.t
                          val empty : 'a t
                          val singleton : Key.t -> '-> 'a t
                          val of_alist :
                            (Key.t * 'a) list ->
                            [ `Duplicate_key of Key.t | `Ok of 'a t ]
                          val of_alist_or_error :
                            (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                          val of_alist_exn : (Key.t * 'a) list -> 'a t
                          val of_alist_multi : (Key.t * 'a) list -> 'a list t
                          val of_alist_fold :
                            (Key.t * 'a) list ->
                            init:'-> f:('-> '-> 'b) -> 'b t
                          val of_alist_reduce :
                            (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                          val of_sorted_array :
                            (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked :
                            (Key.t * 'a) array -> 'a t
                          val of_tree : 'a t -> 'a t
                          val invariants : 'a t -> bool
                          val is_empty : 'a t -> bool
                          val length : 'a t -> int
                          val add : 'a t -> key:Key.t -> data:'-> 'a t
                          val add_multi :
                            'a list t -> key:Key.t -> data:'-> 'a list t
                          val change :
                            'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                          val find : 'a t -> Key.t -> 'a option
                          val find_exn : 'a t -> Key.t -> 'a
                          val remove : 'a t -> Key.t -> 'a t
                          val mem : 'a t -> Key.t -> bool
                          val iter :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val iter2 :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               data:[ `Both of 'a * 'b
                                    | `Left of 'a
                                    | `Right of 'b ] ->
                               unit) ->
                            unit
                          val map : 'a t -> f:('-> 'b) -> 'b t
                          val mapi :
                            'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                          val fold :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val fold_right :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val filter :
                            'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                          val filter_map :
                            'a t -> f:('-> 'b option) -> 'b t
                          val filter_mapi :
                            'a t ->
                            f:(key:Key.t -> data:'-> 'b option) -> 'b t
                          val compare_direct :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val equal :
                            ('-> '-> bool) -> 'a t -> 'a t -> bool
                          val keys : 'a t -> Key.t list
                          val data : 'a t -> 'a list
                          val to_alist : 'a t -> (Key.t * 'a) list
                          val validate :
                            name:(Key.t -> string) ->
                            'Core_kernel.Validate.check ->
                            'a t Core_kernel.Validate.check
                          val merge :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            'c t
                          val symmetric_diff :
                            'a t ->
                            'a t ->
                            data_equal:('-> '-> bool) ->
                            (Key.t *
                             [ `Left of 'a
                             | `Right of 'a
                             | `Unequal of 'a * 'a ])
                            Core_kernel.Sequence.t
                          val min_elt : 'a t -> (Key.t * 'a) option
                          val min_elt_exn : 'a t -> Key.t * 'a
                          val max_elt : 'a t -> (Key.t * 'a) option
                          val max_elt_exn : 'a t -> Key.t * 'a
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val exists : 'a t -> f:('-> bool) -> bool
                          val fold_range_inclusive :
                            'a t ->
                            min:Key.t ->
                            max:Key.t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val range_to_alist :
                            'a t ->
                            min:Key.t -> max:Key.t -> (Key.t * 'a) list
                          val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val rank : 'a t -> Key.t -> int option
                          val to_tree : 'a t -> 'a t
                          val to_sequence :
                            ?keys_in:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Key.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Key.t ] ->
                            'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                        end
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'Tree.t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'Tree.t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Set :
                    sig
                      module Elt :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                        end
                      module Tree :
                        sig
                          type t =
                              (Elt.t, Elt.comparator_witness)
                              Core_kernel.Core_set.Tree.t
                          val length : t -> int
                          val is_empty : t -> bool
                          val iter : t -> f:(Elt.t -> unit) -> unit
                          val fold :
                            t ->
                            init:'accum ->
                            f:('accum -> Elt.t -> 'accum) -> 'accum
                          val exists : t -> f:(Elt.t -> bool) -> bool
                          val for_all : t -> f:(Elt.t -> bool) -> bool
                          val count : t -> f:(Elt.t -> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            t -> f:(Elt.t -> 'sum) -> 'sum
                          val find : t -> f:(Elt.t -> bool) -> Elt.t option
                          val find_map :
                            t -> f:(Elt.t -> 'a option) -> 'a option
                          val to_list : t -> Elt.t list
                          val to_array : t -> Elt.t array
                          val invariants : t -> bool
                          val mem : t -> Elt.t -> bool
                          val add : t -> Elt.t -> t
                          val remove : t -> Elt.t -> t
                          val union : t -> t -> t
                          val inter : t -> t -> t
                          val diff : t -> t -> t
                          val compare_direct : t -> t -> int
                          val equal : t -> t -> bool
                          val subset : t -> t -> bool
                          val fold_until :
                            t ->
                            init:'->
                            f:('->
                               Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                            'b
                          val fold_right :
                            t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                          val iter2 :
                            t ->
                            t ->
                            f:([ `Both of Elt.t * Elt.t
                               | `Left of Elt.t
                               | `Right of Elt.t ] -> unit) ->
                            unit
                          val filter : t -> f:(Elt.t -> bool) -> t
                          val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                          val elements : t -> Elt.t list
                          val min_elt : t -> Elt.t option
                          val min_elt_exn : t -> Elt.t
                          val max_elt : t -> Elt.t option
                          val max_elt_exn : t -> Elt.t
                          val choose : t -> Elt.t option
                          val choose_exn : t -> Elt.t
                          val split : t -> Elt.t -> t * bool * t
                          val group_by :
                            t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                          val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                          val find_index : t -> int -> Elt.t option
                          val remove_index : t -> int -> t
                          val to_tree : t -> t
                          val to_sequence :
                            ?in_:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Elt.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Elt.t ] ->
                            t -> Elt.t Core_kernel.Sequence.t
                          val to_map :
                            t ->
                            f:(Elt.t -> 'data) ->
                            (Elt.t, 'data, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t
                          val empty : t
                          val singleton : Elt.t -> t
                          val union_list : t list -> t
                          val of_list : Elt.t list -> t
                          val of_array : Elt.t array -> t
                          val of_sorted_array :
                            Elt.t array -> t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked : Elt.t array -> t
                          val stable_dedup_list : Elt.t list -> Elt.t list
                          val map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t) -> t
                          val filter_map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t option) -> t
                          val of_tree : t -> t
                          val of_map_keys :
                            (Elt.t, 'a, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t -> t
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> Tree.t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : Tree.t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hashable : sig type t = t end
                  val hash : t -> int
                  val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
                  module Table :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Pooled_hashtbl :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Pooled_hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Hash_set :
                    sig
                      type elt = t
                      type 'a hash_set = 'Core_kernel.Hash_set.t
                      type t = elt hash_set
                      type 'a t_ = t
                      type 'a elt_ = elt
                      val create :
                        ('a, unit -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val of_list :
                        ('a, 'a elt_ list -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hash_queue :
                    sig
                      module Key :
                        sig
                          type t = t
                          val hash : t -> int
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type 'a t = 'Block.Value.Hash_queue.t
                      val length : 'a t -> int
                      val is_empty : 'a t -> bool
                      val iter : 'a t -> f:('-> unit) -> unit
                      val fold :
                        'a t ->
                        init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                      val exists : 'a t -> f:('-> bool) -> bool
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val count : 'a t -> f:('-> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        'a t -> f:('-> 'sum) -> 'sum
                      val find : 'a t -> f:('-> bool) -> 'a option
                      val find_map : 'a t -> f:('-> 'b option) -> 'b option
                      val to_list : 'a t -> 'a list
                      val to_array : 'a t -> 'a array
                      val min_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val max_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val invariant : 'a t -> unit
                      val create : unit -> 'a t
                      val clear : 'a t -> unit
                      val mem : 'a t -> Key.t -> bool
                      val lookup : 'a t -> Key.t -> 'a option
                      val lookup_exn : 'a t -> Key.t -> 'a
                      val enqueue :
                        'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                      val enqueue_exn : 'a t -> Key.t -> '-> unit
                      val first : 'a t -> 'a option
                      val keys : 'a t -> Key.t list
                      val dequeue : 'a t -> 'a option
                      val dequeue_exn : 'a t -> 'a
                      val dequeue_with_key : 'a t -> (Key.t * 'a) option
                      val dequeue_with_key_exn : 'a t -> Key.t * 'a
                      val dequeue_all : 'a t -> f:('-> unit) -> unit
                      val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                      val remove_exn : 'a t -> Key.t -> unit
                      val replace :
                        'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                      val replace_exn : 'a t -> Key.t -> '-> unit
                      val iteri :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val foldi :
                        'a t ->
                        init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                    end
                  val pp : Format.formatter -> t -> unit
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_t : t Bin_prot.Type_class.t
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val of_json : Ezjsonm.t -> t
                  val to_json : t -> Ezjsonm.t
                  val merge : t IrminMerge.t
                end
              module Graph :
                sig
                  type t = Block.Graph.t
                  module V :
                    sig
                      type t = (key, unit) IrminGraph.vertex
                      val compare : t -> t -> int
                      val hash : t -> int
                      val equal : t -> t -> bool
                      type label = Block.Graph.V.label
                      val create : label -> t
                      val label : t -> label
                    end
                  type vertex = V.t
                  module E :
                    sig
                      type t = Block.Graph.E.t
                      val compare : t -> t -> int
                      type vertex = vertex
                      val src : t -> vertex
                      val dst : t -> vertex
                      type label = Block.Graph.E.label
                      val create : vertex -> label -> vertex -> t
                      val label : t -> label
                    end
                  type edge = E.t
                  val is_directed : bool
                  val is_empty : t -> bool
                  val nb_vertex : t -> int
                  val nb_edges : t -> int
                  val out_degree : t -> vertex -> int
                  val in_degree : t -> vertex -> int
                  val mem_vertex : t -> vertex -> bool
                  val mem_edge : t -> vertex -> vertex -> bool
                  val mem_edge_e : t -> edge -> bool
                  val find_edge : t -> vertex -> vertex -> edge
                  val find_all_edges : t -> vertex -> vertex -> edge list
                  val succ : t -> vertex -> vertex list
                  val pred : t -> vertex -> vertex list
                  val succ_e : t -> vertex -> edge list
                  val pred_e : t -> vertex -> edge list
                  val iter_vertex : (vertex -> unit) -> t -> unit
                  val fold_vertex : (vertex -> '-> 'a) -> t -> '-> 'a
                  val iter_edges : (vertex -> vertex -> unit) -> t -> unit
                  val fold_edges :
                    (vertex -> vertex -> '-> 'a) -> t -> '-> 'a
                  val iter_edges_e : (edge -> unit) -> t -> unit
                  val fold_edges_e : (edge -> '-> 'a) -> t -> '-> 'a
                  val map_vertex : (vertex -> vertex) -> t -> t
                  val iter_succ : (vertex -> unit) -> t -> vertex -> unit
                  val iter_pred : (vertex -> unit) -> t -> vertex -> unit
                  val fold_succ :
                    (vertex -> '-> 'a) -> t -> vertex -> '-> 'a
                  val fold_pred :
                    (vertex -> '-> 'a) -> t -> vertex -> '-> 'a
                  val iter_succ_e : (edge -> unit) -> t -> vertex -> unit
                  val fold_succ_e :
                    (edge -> '-> 'a) -> t -> vertex -> '-> 'a
                  val iter_pred_e : (edge -> unit) -> t -> vertex -> unit
                  val fold_pred_e :
                    (edge -> '-> 'a) -> t -> vertex -> '-> 'a
                  val create : ?size:int -> unit -> t
                  val clear : t -> unit
                  val copy : t -> t
                  val add_vertex : t -> vertex -> unit
                  val remove_vertex : t -> vertex -> unit
                  val add_edge : t -> vertex -> vertex -> unit
                  val add_edge_e : t -> edge -> unit
                  val remove_edge : t -> vertex -> vertex -> unit
                  val remove_edge_e : t -> edge -> unit
                  val transitive_closure : ?reflexive:bool -> t -> t
                  val add_transitive_closure : ?reflexive:bool -> t -> t
                  val transitive_reduction : ?reflexive:bool -> t -> t
                  val replace_by_transitive_reduction :
                    ?reflexive:bool -> t -> t
                  val mirror : t -> t
                  val complement : t -> t
                  val intersect : t -> t -> t
                  val union : t -> t -> t
                  module Topological :
                    sig val fold : (vertex -> '-> 'a) -> t -> '-> 'end
                  val vertex : t -> vertex list
                  val edges : t -> (vertex * vertex) list
                  val closure :
                    ?depth:int ->
                    ?min:vertex list ->
                    pred:(vertex -> vertex list Lwt.t) ->
                    vertex list -> t Lwt.t
                  val output :
                    Format.formatter ->
                    (vertex * Graph.Graphviz.DotAttributes.vertex list) list ->
                    (vertex * Graph.Graphviz.DotAttributes.edge list * vertex)
                    list -> string -> unit
                  val min : t -> vertex list
                  val max : t -> vertex list
                  type dump = vertex list * (vertex * vertex) list
                  val export : t -> dump
                  val import : dump -> t
                  module Dump :
                    sig
                      type t = dump
                      val of_string : string -> t
                      val to_string : t -> string
                      val ( >= ) : t -> t -> bool
                      val ( <= ) : t -> t -> bool
                      val ( = ) : t -> t -> bool
                      val ( > ) : t -> t -> bool
                      val ( < ) : t -> t -> bool
                      val ( <> ) : t -> t -> bool
                      val equal : t -> t -> bool
                      val compare : t -> t -> int
                      val min : t -> t -> t
                      val max : t -> t -> t
                      val ascending : t -> t -> int
                      val descending : t -> t -> int
                      val between : t -> low:t -> high:t -> bool
                      module Replace_polymorphic_compare :
                        sig
                          val ( >= ) : t -> t -> bool
                          val ( <= ) : t -> t -> bool
                          val ( = ) : t -> t -> bool
                          val ( > ) : t -> t -> bool
                          val ( < ) : t -> t -> bool
                          val ( <> ) : t -> t -> bool
                          val equal : t -> t -> bool
                          val compare : t -> t -> int
                          val min : t -> t -> t
                          val max : t -> t -> t
                          val _squelch_unused_module_warning_ : unit
                        end
                      type comparator_witness =
                          Block.Graph.Dump.comparator_witness
                      val validate_lbound :
                        min:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val validate_ubound :
                        max:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val validate_bound :
                        min:t Core_kernel.Comparable_intf.bound ->
                        max:t Core_kernel.Comparable_intf.bound ->
                        t Core_kernel.Validate.check
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                      module Map :
                        sig
                          module Key :
                            sig
                              type t = t
                              type comparator_witness = comparator_witness
                              val comparator :
                                (t, comparator_witness)
                                Core_kernel.Comparator.comparator
                            end
                          module Tree :
                            sig
                              type 'a t =
                                  (Key.t, 'a, Key.comparator_witness)
                                  Core_kernel.Core_map.Tree.t
                              val empty : 'a t
                              val singleton : Key.t -> '-> 'a t
                              val of_alist :
                                (Key.t * 'a) list ->
                                [ `Duplicate_key of Key.t | `Ok of 'a t ]
                              val of_alist_or_error :
                                (Key.t * 'a) list ->
                                'a t Core_kernel.Or_error.t
                              val of_alist_exn : (Key.t * 'a) list -> 'a t
                              val of_alist_multi :
                                (Key.t * 'a) list -> 'a list t
                              val of_alist_fold :
                                (Key.t * 'a) list ->
                                init:'-> f:('-> '-> 'b) -> 'b t
                              val of_alist_reduce :
                                (Key.t * 'a) list ->
                                f:('-> '-> 'a) -> 'a t
                              val of_sorted_array :
                                (Key.t * 'a) array ->
                                'a t Core_kernel.Or_error.t
                              val of_sorted_array_unchecked :
                                (Key.t * 'a) array -> 'a t
                              val of_tree : 'a t -> 'a t
                              val invariants : 'a t -> bool
                              val is_empty : 'a t -> bool
                              val length : 'a t -> int
                              val add : 'a t -> key:Key.t -> data:'-> 'a t
                              val add_multi :
                                'a list t ->
                                key:Key.t -> data:'-> 'a list t
                              val change :
                                'a t ->
                                Key.t -> ('a option -> 'a option) -> 'a t
                              val find : 'a t -> Key.t -> 'a option
                              val find_exn : 'a t -> Key.t -> 'a
                              val remove : 'a t -> Key.t -> 'a t
                              val mem : 'a t -> Key.t -> bool
                              val iter :
                                'a t ->
                                f:(key:Key.t -> data:'-> unit) -> unit
                              val iter2 :
                                'a t ->
                                'b t ->
                                f:(key:Key.t ->
                                   data:[ `Both of 'a * 'b
                                        | `Left of 'a
                                        | `Right of 'b ] ->
                                   unit) ->
                                unit
                              val map : 'a t -> f:('-> 'b) -> 'b t
                              val mapi :
                                'a t ->
                                f:(key:Key.t -> data:'-> 'b) -> 'b t
                              val fold :
                                'a t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val fold_right :
                                'a t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val filter :
                                'a t ->
                                f:(key:Key.t -> data:'-> bool) -> 'a t
                              val filter_map :
                                'a t -> f:('-> 'b option) -> 'b t
                              val filter_mapi :
                                'a t ->
                                f:(key:Key.t -> data:'-> 'b option) -> 'b t
                              val compare_direct :
                                ('-> '-> int) -> 'a t -> 'a t -> int
                              val equal :
                                ('-> '-> bool) -> 'a t -> 'a t -> bool
                              val keys : 'a t -> Key.t list
                              val data : 'a t -> 'a list
                              val to_alist : 'a t -> (Key.t * 'a) list
                              val validate :
                                name:(Key.t -> string) ->
                                'Core_kernel.Validate.check ->
                                'a t Core_kernel.Validate.check
                              val merge :
                                'a t ->
                                'b t ->
                                f:(key:Key.t ->
                                   [ `Both of 'a * 'b
                                   | `Left of 'a
                                   | `Right of 'b ] -> 'c option) ->
                                'c t
                              val symmetric_diff :
                                'a t ->
                                'a t ->
                                data_equal:('-> '-> bool) ->
                                (Key.t *
                                 [ `Left of 'a
                                 | `Right of 'a
                                 | `Unequal of 'a * 'a ])
                                Core_kernel.Sequence.t
                              val min_elt : 'a t -> (Key.t * 'a) option
                              val min_elt_exn : 'a t -> Key.t * 'a
                              val max_elt : 'a t -> (Key.t * 'a) option
                              val max_elt_exn : 'a t -> Key.t * 'a
                              val for_all : 'a t -> f:('-> bool) -> bool
                              val exists : 'a t -> f:('-> bool) -> bool
                              val fold_range_inclusive :
                                'a t ->
                                min:Key.t ->
                                max:Key.t ->
                                init:'->
                                f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                              val range_to_alist :
                                'a t ->
                                min:Key.t -> max:Key.t -> (Key.t * 'a) list
                              val prev_key :
                                'a t -> Key.t -> (Key.t * 'a) option
                              val next_key :
                                'a t -> Key.t -> (Key.t * 'a) option
                              val rank : 'a t -> Key.t -> int option
                              val to_tree : 'a t -> 'a t
                              val to_sequence :
                                ?keys_in:[ `Decreasing_order
                                         | `Decreasing_order_less_than_or_equal_to of
                                             Key.t
                                         | `Increasing_order
                                         | `Increasing_order_greater_than_or_equal_to of
                                             Key.t ] ->
                                'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                              val t_of_sexp :
                                (Sexplib.Sexp.t -> 'a) ->
                                Sexplib.Sexp.t -> 'a t
                              val sexp_of_t :
                                ('-> Sexplib.Sexp.t) ->
                                'a t -> Sexplib.Sexp.t
                            end
                          type 'a t =
                              (Key.t, 'a, Key.comparator_witness)
                              Core_kernel.Core_map.t
                          val empty : 'a t
                          val singleton : Key.t -> '-> 'a t
                          val of_alist :
                            (Key.t * 'a) list ->
                            [ `Duplicate_key of Key.t | `Ok of 'a t ]
                          val of_alist_or_error :
                            (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                          val of_alist_exn : (Key.t * 'a) list -> 'a t
                          val of_alist_multi : (Key.t * 'a) list -> 'a list t
                          val of_alist_fold :
                            (Key.t * 'a) list ->
                            init:'-> f:('-> '-> 'b) -> 'b t
                          val of_alist_reduce :
                            (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                          val of_sorted_array :
                            (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked :
                            (Key.t * 'a) array -> 'a t
                          val of_tree : 'Tree.t -> 'a t
                          val invariants : 'a t -> bool
                          val is_empty : 'a t -> bool
                          val length : 'a t -> int
                          val add : 'a t -> key:Key.t -> data:'-> 'a t
                          val add_multi :
                            'a list t -> key:Key.t -> data:'-> 'a list t
                          val change :
                            'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                          val find : 'a t -> Key.t -> 'a option
                          val find_exn : 'a t -> Key.t -> 'a
                          val remove : 'a t -> Key.t -> 'a t
                          val mem : 'a t -> Key.t -> bool
                          val iter :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val iter2 :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               data:[ `Both of 'a * 'b
                                    | `Left of 'a
                                    | `Right of 'b ] ->
                               unit) ->
                            unit
                          val map : 'a t -> f:('-> 'b) -> 'b t
                          val mapi :
                            'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                          val fold :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val fold_right :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val filter :
                            'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                          val filter_map :
                            'a t -> f:('-> 'b option) -> 'b t
                          val filter_mapi :
                            'a t ->
                            f:(key:Key.t -> data:'-> 'b option) -> 'b t
                          val compare_direct :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val equal :
                            ('-> '-> bool) -> 'a t -> 'a t -> bool
                          val keys : 'a t -> Key.t list
                          val data : 'a t -> 'a list
                          val to_alist : 'a t -> (Key.t * 'a) list
                          val validate :
                            name:(Key.t -> string) ->
                            'Core_kernel.Validate.check ->
                            'a t Core_kernel.Validate.check
                          val merge :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            'c t
                          val symmetric_diff :
                            'a t ->
                            'a t ->
                            data_equal:('-> '-> bool) ->
                            (Key.t *
                             [ `Left of 'a
                             | `Right of 'a
                             | `Unequal of 'a * 'a ])
                            Core_kernel.Sequence.t
                          val min_elt : 'a t -> (Key.t * 'a) option
                          val min_elt_exn : 'a t -> Key.t * 'a
                          val max_elt : 'a t -> (Key.t * 'a) option
                          val max_elt_exn : 'a t -> Key.t * 'a
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val exists : 'a t -> f:('-> bool) -> bool
                          val fold_range_inclusive :
                            'a t ->
                            min:Key.t ->
                            max:Key.t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val range_to_alist :
                            'a t ->
                            min:Key.t -> max:Key.t -> (Key.t * 'a) list
                          val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val rank : 'a t -> Key.t -> int option
                          val to_tree : 'a t -> 'Tree.t
                          val to_sequence :
                            ?keys_in:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Key.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Key.t ] ->
                            'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                          val compare :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Set :
                        sig
                          module Elt :
                            sig
                              type t = t
                              type comparator_witness = comparator_witness
                              val comparator :
                                (t, comparator_witness)
                                Core_kernel.Comparator.comparator
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                            end
                          module Tree :
                            sig
                              type t =
                                  (Elt.t, Elt.comparator_witness)
                                  Core_kernel.Core_set.Tree.t
                              val length : t -> int
                              val is_empty : t -> bool
                              val iter : t -> f:(Elt.t -> unit) -> unit
                              val fold :
                                t ->
                                init:'accum ->
                                f:('accum -> Elt.t -> 'accum) -> 'accum
                              val exists : t -> f:(Elt.t -> bool) -> bool
                              val for_all : t -> f:(Elt.t -> bool) -> bool
                              val count : t -> f:(Elt.t -> bool) -> int
                              val sum :
                                (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                                t -> f:(Elt.t -> 'sum) -> 'sum
                              val find :
                                t -> f:(Elt.t -> bool) -> Elt.t option
                              val find_map :
                                t -> f:(Elt.t -> 'a option) -> 'a option
                              val to_list : t -> Elt.t list
                              val to_array : t -> Elt.t array
                              val invariants : t -> bool
                              val mem : t -> Elt.t -> bool
                              val add : t -> Elt.t -> t
                              val remove : t -> Elt.t -> t
                              val union : t -> t -> t
                              val inter : t -> t -> t
                              val diff : t -> t -> t
                              val compare_direct : t -> t -> int
                              val equal : t -> t -> bool
                              val subset : t -> t -> bool
                              val fold_until :
                                t ->
                                init:'->
                                f:('->
                                   Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                                'b
                              val fold_right :
                                t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                              val iter2 :
                                t ->
                                t ->
                                f:([ `Both of Elt.t * Elt.t
                                   | `Left of Elt.t
                                   | `Right of Elt.t ] -> unit) ->
                                unit
                              val filter : t -> f:(Elt.t -> bool) -> t
                              val partition_tf :
                                t -> f:(Elt.t -> bool) -> t * t
                              val elements : t -> Elt.t list
                              val min_elt : t -> Elt.t option
                              val min_elt_exn : t -> Elt.t
                              val max_elt : t -> Elt.t option
                              val max_elt_exn : t -> Elt.t
                              val choose : t -> Elt.t option
                              val choose_exn : t -> Elt.t
                              val split : t -> Elt.t -> t * bool * t
                              val group_by :
                                t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                              val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                              val find_index : t -> int -> Elt.t option
                              val remove_index : t -> int -> t
                              val to_tree : t -> t
                              val to_sequence :
                                ?in_:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Elt.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Elt.t ] ->
                                t -> Elt.t Core_kernel.Sequence.t
                              val to_map :
                                t ->
                                f:(Elt.t -> 'data) ->
                                (Elt.t, 'data, Elt.comparator_witness)
                                Core_kernel.Core_set_intf.Map.t
                              val empty : t
                              val singleton : Elt.t -> t
                              val union_list : t list -> t
                              val of_list : Elt.t list -> t
                              val of_array : Elt.t array -> t
                              val of_sorted_array :
                                Elt.t array -> t Core_kernel.Or_error.t
                              val of_sorted_array_unchecked :
                                Elt.t array -> t
                              val stable_dedup_list :
                                Elt.t list -> Elt.t list
                              val map :
                                ('a, 'b) Core_kernel.Core_set.Tree.t ->
                                f:('-> Elt.t) -> t
                              val filter_map :
                                ('a, 'b) Core_kernel.Core_set.Tree.t ->
                                f:('-> Elt.t option) -> t
                              val of_tree : t -> t
                              val of_map_keys :
                                (Elt.t, 'a, Elt.comparator_witness)
                                Core_kernel.Core_set_intf.Map.t -> t
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                              val compare : t -> t -> int
                            end
                          type t =
                              (Elt.t, Elt.comparator_witness)
                              Core_kernel.Core_set.t
                          val length : t -> int
                          val is_empty : t -> bool
                          val iter : t -> f:(Elt.t -> unit) -> unit
                          val fold :
                            t ->
                            init:'accum ->
                            f:('accum -> Elt.t -> 'accum) -> 'accum
                          val exists : t -> f:(Elt.t -> bool) -> bool
                          val for_all : t -> f:(Elt.t -> bool) -> bool
                          val count : t -> f:(Elt.t -> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            t -> f:(Elt.t -> 'sum) -> 'sum
                          val find : t -> f:(Elt.t -> bool) -> Elt.t option
                          val find_map :
                            t -> f:(Elt.t -> 'a option) -> 'a option
                          val to_list : t -> Elt.t list
                          val to_array : t -> Elt.t array
                          val invariants : t -> bool
                          val mem : t -> Elt.t -> bool
                          val add : t -> Elt.t -> t
                          val remove : t -> Elt.t -> t
                          val union : t -> t -> t
                          val inter : t -> t -> t
                          val diff : t -> t -> t
                          val compare_direct : t -> t -> int
                          val equal : t -> t -> bool
                          val subset : t -> t -> bool
                          val fold_until :
                            t ->
                            init:'->
                            f:('->
                               Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                            'b
                          val fold_right :
                            t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                          val iter2 :
                            t ->
                            t ->
                            f:([ `Both of Elt.t * Elt.t
                               | `Left of Elt.t
                               | `Right of Elt.t ] -> unit) ->
                            unit
                          val filter : t -> f:(Elt.t -> bool) -> t
                          val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                          val elements : t -> Elt.t list
                          val min_elt : t -> Elt.t option
                          val min_elt_exn : t -> Elt.t
                          val max_elt : t -> Elt.t option
                          val max_elt_exn : t -> Elt.t
                          val choose : t -> Elt.t option
                          val choose_exn : t -> Elt.t
                          val split : t -> Elt.t -> t * bool * t
                          val group_by :
                            t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                          val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                          val find_index : t -> int -> Elt.t option
                          val remove_index : t -> int -> t
                          val to_tree : t -> Tree.t
                          val to_sequence :
                            ?in_:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Elt.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Elt.t ] ->
                            t -> Elt.t Core_kernel.Sequence.t
                          val to_map :
                            t ->
                            f:(Elt.t -> 'data) ->
                            (Elt.t, 'data, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t
                          val empty : t
                          val singleton : Elt.t -> t
                          val union_list : t list -> t
                          val of_list : Elt.t list -> t
                          val of_array : Elt.t array -> t
                          val of_sorted_array :
                            Elt.t array -> t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked : Elt.t array -> t
                          val stable_dedup_list : Elt.t list -> Elt.t list
                          val map :
                            ('a, 'b) Core_kernel.Core_set.t ->
                            f:('-> Elt.t) -> t
                          val filter_map :
                            ('a, 'b) Core_kernel.Core_set.t ->
                            f:('-> Elt.t option) -> t
                          val of_tree : Tree.t -> t
                          val of_map_keys :
                            (Elt.t, 'a, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t -> t
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                          val bin_size_t : t Bin_prot.Size.sizer
                          val bin_write_t : t Bin_prot.Write.writer
                          val bin_read_t : t Bin_prot.Read.reader
                          val __bin_read_t__ :
                            (int -> t) Bin_prot.Read.reader
                          val bin_writer_t : t Bin_prot.Type_class.writer
                          val bin_reader_t : t Bin_prot.Type_class.reader
                          val bin_t : t Bin_prot.Type_class.t
                        end
                      module Hashable : sig type t = t end
                      val hash : t -> int
                      val hashable :
                        t Core_kernel.Hashable.Hashtbl.Hashable.t
                      module Table :
                        sig
                          type key = t
                          type ('a, 'b) hashtbl =
                              ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                          type 'b t = (key, 'b) hashtbl
                          type ('a, 'b) t_ = 'b t
                          type 'a key_ = key
                          val hashable :
                            key Core_kernel.Core_hashtbl_intf.Hashable.t
                          val create :
                            ('a key_, 'b, unit -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_report_all_dups :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_or_error :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             ('a, 'b) t_ Core_kernel.Or_error.t)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_exn :
                            ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_multi :
                            ('a key_, 'b list,
                             ('a key_ * 'b) list -> ('a, 'b list) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_mapped :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'r) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key_exn :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list -> ('a, 'r) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val group :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             combine:('-> '-> 'b) ->
                             'r list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val sexp_of_key :
                            ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                          val clear : ('a, 'b) t_ -> unit
                          val copy : ('a, 'b) t_ -> ('a, 'b) t_
                          val invariant : ('a, 'b) t_ -> unit
                          val fold :
                            ('a, 'b) t_ ->
                            init:'->
                            f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                          val iter :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> unit) -> unit
                          val existsi :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val for_alli :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val length : ('a, 'b) t_ -> int
                          val is_empty : ('a, 'b) t_ -> bool
                          val mem : ('a, 'b) t_ -> 'a key_ -> bool
                          val remove : ('a, 'b) t_ -> 'a key_ -> unit
                          val remove_one :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val replace :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val set :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val add :
                            ('a, 'b) t_ ->
                            key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                          val add_exn :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val change :
                            ('a, 'b) t_ ->
                            'a key_ -> ('b option -> 'b option) -> unit
                          val add_multi :
                            ('a, 'b list) t_ ->
                            key:'a key_ -> data:'-> unit
                          val remove_multi :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val map :
                            ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_map :
                            ('c,
                             ('a, 'b) t_ ->
                             f:('-> 'c option) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c option) ->
                             ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter :
                            ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                          val filteri :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                          val partition_map :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:('-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_mapi :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:(key:'a key_ ->
                                 data:'-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_tf :
                            ('a, 'b) t_ ->
                            f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                          val partitioni_tf :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) ->
                            ('a, 'b) t_ * ('a, 'b) t_
                          val find_or_add :
                            ('a, 'b) t_ ->
                            'a key_ -> default:(unit -> 'b) -> 'b
                          val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                          val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                          val find_and_remove :
                            ('a, 'b) t_ -> 'a key_ -> 'b option
                          val iter_vals :
                            ('a, 'b) t_ -> f:('-> unit) -> unit
                          val merge :
                            ('c,
                             ('k, 'a) t_ ->
                             ('k, 'b) t_ ->
                             f:(key:'k key_ ->
                                [ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] -> 'c option) ->
                             ('k, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val merge_into :
                            f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                            src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                          val keys : ('a, 'b) t_ -> 'a key_ list
                          val data : ('a, 'b) t_ -> 'b list
                          val filter_inplace :
                            ('a, 'b) t_ -> f:('-> bool) -> unit
                          val filteri_inplace :
                            ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                          val equal :
                            ('a, 'b) t_ ->
                            ('a, 'b) t_ -> ('-> '-> bool) -> bool
                          val similar :
                            ('a, 'b1) t_ ->
                            ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                          val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                          val validate :
                            name:('a key_ -> string) ->
                            'Core_kernel.Validate.check ->
                            ('a, 'b) t_ Core_kernel.Validate.check
                          val incr :
                            ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Pooled_hashtbl :
                        sig
                          type key = t
                          type ('a, 'b) hashtbl =
                              ('a, 'b) Core_kernel.Pooled_hashtbl.t
                          type 'b t = (key, 'b) hashtbl
                          type ('a, 'b) t_ = 'b t
                          type 'a key_ = key
                          val hashable :
                            key Core_kernel.Core_hashtbl_intf.Hashable.t
                          val create :
                            ('a key_, 'b, unit -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_report_all_dups :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_or_error :
                            ('a key_, 'b,
                             ('a key_ * 'b) list ->
                             ('a, 'b) t_ Core_kernel.Or_error.t)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_exn :
                            ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val of_alist_multi :
                            ('a key_, 'b list,
                             ('a key_ * 'b) list -> ('a, 'b list) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_mapped :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'b) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list ->
                             [ `Duplicate_keys of 'a key_ list
                             | `Ok of ('a, 'r) t_ ])
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val create_with_key_exn :
                            ('a key_, 'r,
                             get_key:('-> 'a key_) ->
                             'r list -> ('a, 'r) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val group :
                            ('a key_, 'b,
                             get_key:('-> 'a key_) ->
                             get_data:('-> 'b) ->
                             combine:('-> '-> 'b) ->
                             'r list -> ('a, 'b) t_)
                            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                          val sexp_of_key :
                            ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                          val clear : ('a, 'b) t_ -> unit
                          val copy : ('a, 'b) t_ -> ('a, 'b) t_
                          val invariant : ('a, 'b) t_ -> unit
                          val fold :
                            ('a, 'b) t_ ->
                            init:'->
                            f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                          val iter :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> unit) -> unit
                          val existsi :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val for_alli :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> bool
                          val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                          val length : ('a, 'b) t_ -> int
                          val is_empty : ('a, 'b) t_ -> bool
                          val mem : ('a, 'b) t_ -> 'a key_ -> bool
                          val remove : ('a, 'b) t_ -> 'a key_ -> unit
                          val remove_one :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val replace :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val set :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val add :
                            ('a, 'b) t_ ->
                            key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                          val add_exn :
                            ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                          val change :
                            ('a, 'b) t_ ->
                            'a key_ -> ('b option -> 'b option) -> unit
                          val add_multi :
                            ('a, 'b list) t_ ->
                            key:'a key_ -> data:'-> unit
                          val remove_multi :
                            ('a, 'b list) t_ -> 'a key_ -> unit
                          val map :
                            ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_map :
                            ('c,
                             ('a, 'b) t_ ->
                             f:('-> 'c option) -> ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter_mapi :
                            ('c,
                             ('a, 'b) t_ ->
                             f:(key:'a key_ -> data:'-> 'c option) ->
                             ('a, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val filter :
                            ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                          val filteri :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                          val partition_map :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:('-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_mapi :
                            ('c,
                             ('d,
                              ('a, 'b) t_ ->
                              f:(key:'a key_ ->
                                 data:'-> [ `Fst of '| `Snd of 'd ]) ->
                              ('a, 'c) t_ * ('a, 'd) t_)
                             Core_kernel.Core_hashtbl_intf.no_map_options)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val partition_tf :
                            ('a, 'b) t_ ->
                            f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                          val partitioni_tf :
                            ('a, 'b) t_ ->
                            f:(key:'a key_ -> data:'-> bool) ->
                            ('a, 'b) t_ * ('a, 'b) t_
                          val find_or_add :
                            ('a, 'b) t_ ->
                            'a key_ -> default:(unit -> 'b) -> 'b
                          val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                          val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                          val find_and_remove :
                            ('a, 'b) t_ -> 'a key_ -> 'b option
                          val iter_vals :
                            ('a, 'b) t_ -> f:('-> unit) -> unit
                          val merge :
                            ('c,
                             ('k, 'a) t_ ->
                             ('k, 'b) t_ ->
                             f:(key:'k key_ ->
                                [ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] -> 'c option) ->
                             ('k, 'c) t_)
                            Core_kernel.Core_hashtbl_intf.no_map_options
                          val merge_into :
                            f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                            src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                          val keys : ('a, 'b) t_ -> 'a key_ list
                          val data : ('a, 'b) t_ -> 'b list
                          val filter_inplace :
                            ('a, 'b) t_ -> f:('-> bool) -> unit
                          val filteri_inplace :
                            ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                          val equal :
                            ('a, 'b) t_ ->
                            ('a, 'b) t_ -> ('-> '-> bool) -> bool
                          val similar :
                            ('a, 'b1) t_ ->
                            ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                          val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                          val validate :
                            name:('a key_ -> string) ->
                            'Core_kernel.Validate.check ->
                            ('a, 'b) t_ Core_kernel.Validate.check
                          val incr :
                            ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                          val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                          val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                          val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                          val __bin_read_t__ :
                            ('a, int -> 'a t) Bin_prot.Read.reader1
                          val bin_writer_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.writer
                          val bin_reader_t :
                            ('a, 'a t) Bin_prot.Type_class.S1.reader
                          val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                        end
                      module Hash_set :
                        sig
                          type elt = t
                          type 'a hash_set = 'Core_kernel.Hash_set.t
                          type t = elt hash_set
                          type 'a t_ = t
                          type 'a elt_ = elt
                          val create :
                            ('a, unit -> 'a t_)
                            Core_kernel.Hash_set_intf.create_options_without_hashable
                          val of_list :
                            ('a, 'a elt_ list -> 'a t_)
                            Core_kernel.Hash_set_intf.create_options_without_hashable
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val bin_size_t : t Bin_prot.Size.sizer
                          val bin_write_t : t Bin_prot.Write.writer
                          val bin_read_t : t Bin_prot.Read.reader
                          val __bin_read_t__ :
                            (int -> t) Bin_prot.Read.reader
                          val bin_writer_t : t Bin_prot.Type_class.writer
                          val bin_reader_t : t Bin_prot.Type_class.reader
                          val bin_t : t Bin_prot.Type_class.t
                        end
                      module Hash_queue :
                        sig
                          module Key :
                            sig
                              type t = t
                              val hash : t -> int
                              val t_of_sexp : Sexplib.Sexp.t -> t
                              val sexp_of_t : t -> Sexplib.Sexp.t
                              val compare : t -> t -> int
                            end
                          type 'a t = 'Block.Graph.Dump.Hash_queue.t
                          val length : 'a t -> int
                          val is_empty : 'a t -> bool
                          val iter : 'a t -> f:('-> unit) -> unit
                          val fold :
                            'a t ->
                            init:'accum ->
                            f:('accum -> '-> 'accum) -> 'accum
                          val exists : 'a t -> f:('-> bool) -> bool
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val count : 'a t -> f:('-> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            'a t -> f:('-> 'sum) -> 'sum
                          val find : 'a t -> f:('-> bool) -> 'a option
                          val find_map :
                            'a t -> f:('-> 'b option) -> 'b option
                          val to_list : 'a t -> 'a list
                          val to_array : 'a t -> 'a array
                          val min_elt :
                            'a t -> cmp:('-> '-> int) -> 'a option
                          val max_elt :
                            'a t -> cmp:('-> '-> int) -> 'a option
                          val invariant : 'a t -> unit
                          val create : unit -> 'a t
                          val clear : 'a t -> unit
                          val mem : 'a t -> Key.t -> bool
                          val lookup : 'a t -> Key.t -> 'a option
                          val lookup_exn : 'a t -> Key.t -> 'a
                          val enqueue :
                            'a t ->
                            Key.t -> '-> [ `Key_already_present | `Ok ]
                          val enqueue_exn : 'a t -> Key.t -> '-> unit
                          val first : 'a t -> 'a option
                          val keys : 'a t -> Key.t list
                          val dequeue : 'a t -> 'a option
                          val dequeue_exn : 'a t -> 'a
                          val dequeue_with_key : 'a t -> (Key.t * 'a) option
                          val dequeue_with_key_exn : 'a t -> Key.t * 'a
                          val dequeue_all : 'a t -> f:('-> unit) -> unit
                          val remove :
                            'a t -> Key.t -> [ `No_such_key | `Ok ]
                          val remove_exn : 'a t -> Key.t -> unit
                          val replace :
                            'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                          val replace_exn : 'a t -> Key.t -> '-> unit
                          val iteri :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val foldi :
                            'a t ->
                            init:'->
                            f:('-> key:Key.t -> data:'-> 'b) -> 'b
                        end
                      val pp : Format.formatter -> t -> unit
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val bin_t : t Bin_prot.Type_class.t
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val of_json : Ezjsonm.t -> t
                      val to_json : t -> Ezjsonm.t
                    end
                end
            end
          module Tag :
            sig
              type t
              type key = branch
              type value = Block.key
              val create : unit -> t Lwt.t
              val read : t -> key -> value option Lwt.t
              val read_exn : t -> key -> value Lwt.t
              val mem : t -> key -> bool Lwt.t
              val list : t -> key list -> key list Lwt.t
              val dump : t -> (key * value) list Lwt.t
              val update : t -> key -> value -> unit Lwt.t
              val remove : t -> key -> unit Lwt.t
              val watch : t -> key -> value Lwt_stream.t
              module Key :
                sig
                  type t = key
                  val of_string : string -> t
                  val to_string : t -> string
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val ascending : t -> t -> int
                  val descending : t -> t -> int
                  val between : t -> low:t -> high:t -> bool
                  module Replace_polymorphic_compare :
                    sig
                      val ( >= ) : t -> t -> bool
                      val ( <= ) : t -> t -> bool
                      val ( = ) : t -> t -> bool
                      val ( > ) : t -> t -> bool
                      val ( < ) : t -> t -> bool
                      val ( <> ) : t -> t -> bool
                      val equal : t -> t -> bool
                      val compare : t -> t -> int
                      val min : t -> t -> t
                      val max : t -> t -> t
                      val _squelch_unused_module_warning_ : unit
                    end
                  type comparator_witness
                  val validate_lbound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_ubound :
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_bound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val comparator :
                    (t, comparator_witness) Core_kernel.Comparator.comparator
                  module Map :
                    sig
                      module Key :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                        end
                      module Tree :
                        sig
                          type 'a t =
                              (Key.t, 'a, Key.comparator_witness)
                              Core_kernel.Core_map.Tree.t
                          val empty : 'a t
                          val singleton : Key.t -> '-> 'a t
                          val of_alist :
                            (Key.t * 'a) list ->
                            [ `Duplicate_key of Key.t | `Ok of 'a t ]
                          val of_alist_or_error :
                            (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                          val of_alist_exn : (Key.t * 'a) list -> 'a t
                          val of_alist_multi : (Key.t * 'a) list -> 'a list t
                          val of_alist_fold :
                            (Key.t * 'a) list ->
                            init:'-> f:('-> '-> 'b) -> 'b t
                          val of_alist_reduce :
                            (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                          val of_sorted_array :
                            (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked :
                            (Key.t * 'a) array -> 'a t
                          val of_tree : 'a t -> 'a t
                          val invariants : 'a t -> bool
                          val is_empty : 'a t -> bool
                          val length : 'a t -> int
                          val add : 'a t -> key:Key.t -> data:'-> 'a t
                          val add_multi :
                            'a list t -> key:Key.t -> data:'-> 'a list t
                          val change :
                            'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                          val find : 'a t -> Key.t -> 'a option
                          val find_exn : 'a t -> Key.t -> 'a
                          val remove : 'a t -> Key.t -> 'a t
                          val mem : 'a t -> Key.t -> bool
                          val iter :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val iter2 :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               data:[ `Both of 'a * 'b
                                    | `Left of 'a
                                    | `Right of 'b ] ->
                               unit) ->
                            unit
                          val map : 'a t -> f:('-> 'b) -> 'b t
                          val mapi :
                            'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                          val fold :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val fold_right :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val filter :
                            'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                          val filter_map :
                            'a t -> f:('-> 'b option) -> 'b t
                          val filter_mapi :
                            'a t ->
                            f:(key:Key.t -> data:'-> 'b option) -> 'b t
                          val compare_direct :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val equal :
                            ('-> '-> bool) -> 'a t -> 'a t -> bool
                          val keys : 'a t -> Key.t list
                          val data : 'a t -> 'a list
                          val to_alist : 'a t -> (Key.t * 'a) list
                          val validate :
                            name:(Key.t -> string) ->
                            'Core_kernel.Validate.check ->
                            'a t Core_kernel.Validate.check
                          val merge :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            'c t
                          val symmetric_diff :
                            'a t ->
                            'a t ->
                            data_equal:('-> '-> bool) ->
                            (Key.t *
                             [ `Left of 'a
                             | `Right of 'a
                             | `Unequal of 'a * 'a ])
                            Core_kernel.Sequence.t
                          val min_elt : 'a t -> (Key.t * 'a) option
                          val min_elt_exn : 'a t -> Key.t * 'a
                          val max_elt : 'a t -> (Key.t * 'a) option
                          val max_elt_exn : 'a t -> Key.t * 'a
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val exists : 'a t -> f:('-> bool) -> bool
                          val fold_range_inclusive :
                            'a t ->
                            min:Key.t ->
                            max:Key.t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val range_to_alist :
                            'a t ->
                            min:Key.t -> max:Key.t -> (Key.t * 'a) list
                          val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val rank : 'a t -> Key.t -> int option
                          val to_tree : 'a t -> 'a t
                          val to_sequence :
                            ?keys_in:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Key.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Key.t ] ->
                            'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                        end
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'Tree.t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'Tree.t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Set :
                    sig
                      module Elt :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                        end
                      module Tree :
                        sig
                          type t =
                              (Elt.t, Elt.comparator_witness)
                              Core_kernel.Core_set.Tree.t
                          val length : t -> int
                          val is_empty : t -> bool
                          val iter : t -> f:(Elt.t -> unit) -> unit
                          val fold :
                            t ->
                            init:'accum ->
                            f:('accum -> Elt.t -> 'accum) -> 'accum
                          val exists : t -> f:(Elt.t -> bool) -> bool
                          val for_all : t -> f:(Elt.t -> bool) -> bool
                          val count : t -> f:(Elt.t -> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            t -> f:(Elt.t -> 'sum) -> 'sum
                          val find : t -> f:(Elt.t -> bool) -> Elt.t option
                          val find_map :
                            t -> f:(Elt.t -> 'a option) -> 'a option
                          val to_list : t -> Elt.t list
                          val to_array : t -> Elt.t array
                          val invariants : t -> bool
                          val mem : t -> Elt.t -> bool
                          val add : t -> Elt.t -> t
                          val remove : t -> Elt.t -> t
                          val union : t -> t -> t
                          val inter : t -> t -> t
                          val diff : t -> t -> t
                          val compare_direct : t -> t -> int
                          val equal : t -> t -> bool
                          val subset : t -> t -> bool
                          val fold_until :
                            t ->
                            init:'->
                            f:('->
                               Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                            'b
                          val fold_right :
                            t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                          val iter2 :
                            t ->
                            t ->
                            f:([ `Both of Elt.t * Elt.t
                               | `Left of Elt.t
                               | `Right of Elt.t ] -> unit) ->
                            unit
                          val filter : t -> f:(Elt.t -> bool) -> t
                          val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                          val elements : t -> Elt.t list
                          val min_elt : t -> Elt.t option
                          val min_elt_exn : t -> Elt.t
                          val max_elt : t -> Elt.t option
                          val max_elt_exn : t -> Elt.t
                          val choose : t -> Elt.t option
                          val choose_exn : t -> Elt.t
                          val split : t -> Elt.t -> t * bool * t
                          val group_by :
                            t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                          val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                          val find_index : t -> int -> Elt.t option
                          val remove_index : t -> int -> t
                          val to_tree : t -> t
                          val to_sequence :
                            ?in_:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Elt.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Elt.t ] ->
                            t -> Elt.t Core_kernel.Sequence.t
                          val to_map :
                            t ->
                            f:(Elt.t -> 'data) ->
                            (Elt.t, 'data, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t
                          val empty : t
                          val singleton : Elt.t -> t
                          val union_list : t list -> t
                          val of_list : Elt.t list -> t
                          val of_array : Elt.t array -> t
                          val of_sorted_array :
                            Elt.t array -> t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked : Elt.t array -> t
                          val stable_dedup_list : Elt.t list -> Elt.t list
                          val map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t) -> t
                          val filter_map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t option) -> t
                          val of_tree : t -> t
                          val of_map_keys :
                            (Elt.t, 'a, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t -> t
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> Tree.t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : Tree.t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hashable : sig type t = t end
                  val hash : t -> int
                  val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
                  module Table :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Pooled_hashtbl :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Pooled_hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Hash_set :
                    sig
                      type elt = t
                      type 'a hash_set = 'Core_kernel.Hash_set.t
                      type t = elt hash_set
                      type 'a t_ = t
                      type 'a elt_ = elt
                      val create :
                        ('a, unit -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val of_list :
                        ('a, 'a elt_ list -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hash_queue :
                    sig
                      module Key :
                        sig
                          type t = t
                          val hash : t -> int
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type 'a t
                      val length : 'a t -> int
                      val is_empty : 'a t -> bool
                      val iter : 'a t -> f:('-> unit) -> unit
                      val fold :
                        'a t ->
                        init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                      val exists : 'a t -> f:('-> bool) -> bool
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val count : 'a t -> f:('-> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        'a t -> f:('-> 'sum) -> 'sum
                      val find : 'a t -> f:('-> bool) -> 'a option
                      val find_map : 'a t -> f:('-> 'b option) -> 'b option
                      val to_list : 'a t -> 'a list
                      val to_array : 'a t -> 'a array
                      val min_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val max_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val invariant : 'a t -> unit
                      val create : unit -> 'a t
                      val clear : 'a t -> unit
                      val mem : 'a t -> Key.t -> bool
                      val lookup : 'a t -> Key.t -> 'a option
                      val lookup_exn : 'a t -> Key.t -> 'a
                      val enqueue :
                        'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                      val enqueue_exn : 'a t -> Key.t -> '-> unit
                      val first : 'a t -> 'a option
                      val keys : 'a t -> Key.t list
                      val dequeue : 'a t -> 'a option
                      val dequeue_exn : 'a t -> 'a
                      val dequeue_with_key : 'a t -> (Key.t * 'a) option
                      val dequeue_with_key_exn : 'a t -> Key.t * 'a
                      val dequeue_all : 'a t -> f:('-> unit) -> unit
                      val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                      val remove_exn : 'a t -> Key.t -> unit
                      val replace :
                        'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                      val replace_exn : 'a t -> Key.t -> '-> unit
                      val iteri :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val foldi :
                        'a t ->
                        init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                    end
                  val pp : Format.formatter -> t -> unit
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_t : t Bin_prot.Type_class.t
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val of_json : Ezjsonm.t -> t
                  val to_json : t -> Ezjsonm.t
                  val of_raw : string -> t
                  val to_raw : t -> string
                  val of_bytes : Core_kernel.Std.Bigstring.t -> t
                  val of_bytes' : string -> t
                  val master : t
                end
              module Value :
                sig
                  type t = value
                  val of_string : string -> t
                  val to_string : t -> string
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val ascending : t -> t -> int
                  val descending : t -> t -> int
                  val between : t -> low:t -> high:t -> bool
                  module Replace_polymorphic_compare :
                    sig
                      val ( >= ) : t -> t -> bool
                      val ( <= ) : t -> t -> bool
                      val ( = ) : t -> t -> bool
                      val ( > ) : t -> t -> bool
                      val ( < ) : t -> t -> bool
                      val ( <> ) : t -> t -> bool
                      val equal : t -> t -> bool
                      val compare : t -> t -> int
                      val min : t -> t -> t
                      val max : t -> t -> t
                      val _squelch_unused_module_warning_ : unit
                    end
                  type comparator_witness
                  val validate_lbound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_ubound :
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_bound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val comparator :
                    (t, comparator_witness) Core_kernel.Comparator.comparator
                  module Map :
                    sig
                      module Key :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                        end
                      module Tree :
                        sig
                          type 'a t =
                              (Key.t, 'a, Key.comparator_witness)
                              Core_kernel.Core_map.Tree.t
                          val empty : 'a t
                          val singleton : Key.t -> '-> 'a t
                          val of_alist :
                            (Key.t * 'a) list ->
                            [ `Duplicate_key of Key.t | `Ok of 'a t ]
                          val of_alist_or_error :
                            (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                          val of_alist_exn : (Key.t * 'a) list -> 'a t
                          val of_alist_multi : (Key.t * 'a) list -> 'a list t
                          val of_alist_fold :
                            (Key.t * 'a) list ->
                            init:'-> f:('-> '-> 'b) -> 'b t
                          val of_alist_reduce :
                            (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                          val of_sorted_array :
                            (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked :
                            (Key.t * 'a) array -> 'a t
                          val of_tree : 'a t -> 'a t
                          val invariants : 'a t -> bool
                          val is_empty : 'a t -> bool
                          val length : 'a t -> int
                          val add : 'a t -> key:Key.t -> data:'-> 'a t
                          val add_multi :
                            'a list t -> key:Key.t -> data:'-> 'a list t
                          val change :
                            'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                          val find : 'a t -> Key.t -> 'a option
                          val find_exn : 'a t -> Key.t -> 'a
                          val remove : 'a t -> Key.t -> 'a t
                          val mem : 'a t -> Key.t -> bool
                          val iter :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val iter2 :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               data:[ `Both of 'a * 'b
                                    | `Left of 'a
                                    | `Right of 'b ] ->
                               unit) ->
                            unit
                          val map : 'a t -> f:('-> 'b) -> 'b t
                          val mapi :
                            'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                          val fold :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val fold_right :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val filter :
                            'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                          val filter_map :
                            'a t -> f:('-> 'b option) -> 'b t
                          val filter_mapi :
                            'a t ->
                            f:(key:Key.t -> data:'-> 'b option) -> 'b t
                          val compare_direct :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val equal :
                            ('-> '-> bool) -> 'a t -> 'a t -> bool
                          val keys : 'a t -> Key.t list
                          val data : 'a t -> 'a list
                          val to_alist : 'a t -> (Key.t * 'a) list
                          val validate :
                            name:(Key.t -> string) ->
                            'Core_kernel.Validate.check ->
                            'a t Core_kernel.Validate.check
                          val merge :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            'c t
                          val symmetric_diff :
                            'a t ->
                            'a t ->
                            data_equal:('-> '-> bool) ->
                            (Key.t *
                             [ `Left of 'a
                             | `Right of 'a
                             | `Unequal of 'a * 'a ])
                            Core_kernel.Sequence.t
                          val min_elt : 'a t -> (Key.t * 'a) option
                          val min_elt_exn : 'a t -> Key.t * 'a
                          val max_elt : 'a t -> (Key.t * 'a) option
                          val max_elt_exn : 'a t -> Key.t * 'a
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val exists : 'a t -> f:('-> bool) -> bool
                          val fold_range_inclusive :
                            'a t ->
                            min:Key.t ->
                            max:Key.t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val range_to_alist :
                            'a t ->
                            min:Key.t -> max:Key.t -> (Key.t * 'a) list
                          val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val rank : 'a t -> Key.t -> int option
                          val to_tree : 'a t -> 'a t
                          val to_sequence :
                            ?keys_in:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Key.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Key.t ] ->
                            'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                        end
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'Tree.t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'Tree.t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Set :
                    sig
                      module Elt :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                        end
                      module Tree :
                        sig
                          type t =
                              (Elt.t, Elt.comparator_witness)
                              Core_kernel.Core_set.Tree.t
                          val length : t -> int
                          val is_empty : t -> bool
                          val iter : t -> f:(Elt.t -> unit) -> unit
                          val fold :
                            t ->
                            init:'accum ->
                            f:('accum -> Elt.t -> 'accum) -> 'accum
                          val exists : t -> f:(Elt.t -> bool) -> bool
                          val for_all : t -> f:(Elt.t -> bool) -> bool
                          val count : t -> f:(Elt.t -> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            t -> f:(Elt.t -> 'sum) -> 'sum
                          val find : t -> f:(Elt.t -> bool) -> Elt.t option
                          val find_map :
                            t -> f:(Elt.t -> 'a option) -> 'a option
                          val to_list : t -> Elt.t list
                          val to_array : t -> Elt.t array
                          val invariants : t -> bool
                          val mem : t -> Elt.t -> bool
                          val add : t -> Elt.t -> t
                          val remove : t -> Elt.t -> t
                          val union : t -> t -> t
                          val inter : t -> t -> t
                          val diff : t -> t -> t
                          val compare_direct : t -> t -> int
                          val equal : t -> t -> bool
                          val subset : t -> t -> bool
                          val fold_until :
                            t ->
                            init:'->
                            f:('->
                               Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                            'b
                          val fold_right :
                            t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                          val iter2 :
                            t ->
                            t ->
                            f:([ `Both of Elt.t * Elt.t
                               | `Left of Elt.t
                               | `Right of Elt.t ] -> unit) ->
                            unit
                          val filter : t -> f:(Elt.t -> bool) -> t
                          val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                          val elements : t -> Elt.t list
                          val min_elt : t -> Elt.t option
                          val min_elt_exn : t -> Elt.t
                          val max_elt : t -> Elt.t option
                          val max_elt_exn : t -> Elt.t
                          val choose : t -> Elt.t option
                          val choose_exn : t -> Elt.t
                          val split : t -> Elt.t -> t * bool * t
                          val group_by :
                            t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                          val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                          val find_index : t -> int -> Elt.t option
                          val remove_index : t -> int -> t
                          val to_tree : t -> t
                          val to_sequence :
                            ?in_:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Elt.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Elt.t ] ->
                            t -> Elt.t Core_kernel.Sequence.t
                          val to_map :
                            t ->
                            f:(Elt.t -> 'data) ->
                            (Elt.t, 'data, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t
                          val empty : t
                          val singleton : Elt.t -> t
                          val union_list : t list -> t
                          val of_list : Elt.t list -> t
                          val of_array : Elt.t array -> t
                          val of_sorted_array :
                            Elt.t array -> t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked : Elt.t array -> t
                          val stable_dedup_list : Elt.t list -> Elt.t list
                          val map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t) -> t
                          val filter_map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t option) -> t
                          val of_tree : t -> t
                          val of_map_keys :
                            (Elt.t, 'a, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t -> t
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> Tree.t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : Tree.t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hashable : sig type t = t end
                  val hash : t -> int
                  val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
                  module Table :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Pooled_hashtbl :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Pooled_hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Hash_set :
                    sig
                      type elt = t
                      type 'a hash_set = 'Core_kernel.Hash_set.t
                      type t = elt hash_set
                      type 'a t_ = t
                      type 'a elt_ = elt
                      val create :
                        ('a, unit -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val of_list :
                        ('a, 'a elt_ list -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hash_queue :
                    sig
                      module Key :
                        sig
                          type t = t
                          val hash : t -> int
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type 'a t
                      val length : 'a t -> int
                      val is_empty : 'a t -> bool
                      val iter : 'a t -> f:('-> unit) -> unit
                      val fold :
                        'a t ->
                        init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                      val exists : 'a t -> f:('-> bool) -> bool
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val count : 'a t -> f:('-> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        'a t -> f:('-> 'sum) -> 'sum
                      val find : 'a t -> f:('-> bool) -> 'a option
                      val find_map : 'a t -> f:('-> 'b option) -> 'b option
                      val to_list : 'a t -> 'a list
                      val to_array : 'a t -> 'a array
                      val min_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val max_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val invariant : 'a t -> unit
                      val create : unit -> 'a t
                      val clear : 'a t -> unit
                      val mem : 'a t -> Key.t -> bool
                      val lookup : 'a t -> Key.t -> 'a option
                      val lookup_exn : 'a t -> Key.t -> 'a
                      val enqueue :
                        'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                      val enqueue_exn : 'a t -> Key.t -> '-> unit
                      val first : 'a t -> 'a option
                      val keys : 'a t -> Key.t list
                      val dequeue : 'a t -> 'a option
                      val dequeue_exn : 'a t -> 'a
                      val dequeue_with_key : 'a t -> (Key.t * 'a) option
                      val dequeue_with_key_exn : 'a t -> Key.t * 'a
                      val dequeue_all : 'a t -> f:('-> unit) -> unit
                      val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                      val remove_exn : 'a t -> Key.t -> unit
                      val replace :
                        'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                      val replace_exn : 'a t -> Key.t -> '-> unit
                      val iteri :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val foldi :
                        'a t ->
                        init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                    end
                  val pp : Format.formatter -> t -> unit
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_t : t Bin_prot.Type_class.t
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val of_json : Ezjsonm.t -> t
                  val to_json : t -> Ezjsonm.t
                  val of_raw : string -> t
                  val to_raw : t -> string
                  val of_bytes : Core_kernel.Std.Bigstring.t -> t
                  val of_bytes' : string -> t
                end
            end
          val block_t : t -> Block.t
          val contents_t : t -> Block.Contents.t
          val node_t : t -> Block.Node.t
          val commit_t : t -> Block.Commit.t
          val tag_t : t -> Tag.t
          val create_head : Block.key -> t Lwt.t
          val head : t -> Block.key option Lwt.t
          val head_exn : t -> Block.key Lwt.t
          val set_head : t -> Block.key -> unit
          val read_node : t -> key -> Block.node option Lwt.t
          val update_node : t -> origin -> key -> Block.node -> unit Lwt.t
          val watch_node : t -> key -> (key * Block.key) Lwt_stream.t
          val update_commit : t -> Block.key -> unit Lwt.t
          val merge_commit :
            t -> ?origin:origin -> Block.key -> unit IrminMerge.result Lwt.t
          module Key :
            sig
              type t = key
              val of_string : string -> t
              val to_string : t -> string
              val ( >= ) : t -> t -> bool
              val ( <= ) : t -> t -> bool
              val ( = ) : t -> t -> bool
              val ( > ) : t -> t -> bool
              val ( < ) : t -> t -> bool
              val ( <> ) : t -> t -> bool
              val equal : t -> t -> bool
              val compare : t -> t -> int
              val min : t -> t -> t
              val max : t -> t -> t
              val ascending : t -> t -> int
              val descending : t -> t -> int
              val between : t -> low:t -> high:t -> bool
              module Replace_polymorphic_compare :
                sig
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val _squelch_unused_module_warning_ : unit
                end
              type comparator_witness
              val validate_lbound :
                min:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val validate_ubound :
                max:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val validate_bound :
                min:t Core_kernel.Comparable_intf.bound ->
                max:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val comparator :
                (t, comparator_witness) Core_kernel.Comparator.comparator
              module Map :
                sig
                  module Key :
                    sig
                      type t = t
                      type comparator_witness = comparator_witness
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                    end
                  module Tree :
                    sig
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.Tree.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'a t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'a t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                    end
                  type 'a t =
                      (Key.t, 'a, Key.comparator_witness)
                      Core_kernel.Core_map.t
                  val empty : 'a t
                  val singleton : Key.t -> '-> 'a t
                  val of_alist :
                    (Key.t * 'a) list ->
                    [ `Duplicate_key of Key.t | `Ok of 'a t ]
                  val of_alist_or_error :
                    (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                  val of_alist_exn : (Key.t * 'a) list -> 'a t
                  val of_alist_multi : (Key.t * 'a) list -> 'a list t
                  val of_alist_fold :
                    (Key.t * 'a) list ->
                    init:'-> f:('-> '-> 'b) -> 'b t
                  val of_alist_reduce :
                    (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                  val of_sorted_array :
                    (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : (Key.t * 'a) array -> 'a t
                  val of_tree : 'Tree.t -> 'a t
                  val invariants : 'a t -> bool
                  val is_empty : 'a t -> bool
                  val length : 'a t -> int
                  val add : 'a t -> key:Key.t -> data:'-> 'a t
                  val add_multi :
                    'a list t -> key:Key.t -> data:'-> 'a list t
                  val change :
                    'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                  val find : 'a t -> Key.t -> 'a option
                  val find_exn : 'a t -> Key.t -> 'a
                  val remove : 'a t -> Key.t -> 'a t
                  val mem : 'a t -> Key.t -> bool
                  val iter : 'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                  val iter2 :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       data:[ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       unit) ->
                    unit
                  val map : 'a t -> f:('-> 'b) -> 'b t
                  val mapi : 'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                  val fold :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val fold_right :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val filter :
                    'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                  val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                  val filter_mapi :
                    'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                  val compare_direct :
                    ('-> '-> int) -> 'a t -> 'a t -> int
                  val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                  val keys : 'a t -> Key.t list
                  val data : 'a t -> 'a list
                  val to_alist : 'a t -> (Key.t * 'a) list
                  val validate :
                    name:(Key.t -> string) ->
                    'Core_kernel.Validate.check ->
                    'a t Core_kernel.Validate.check
                  val merge :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       'c option) ->
                    'c t
                  val symmetric_diff :
                    'a t ->
                    'a t ->
                    data_equal:('-> '-> bool) ->
                    (Key.t *
                     [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                    Core_kernel.Sequence.t
                  val min_elt : 'a t -> (Key.t * 'a) option
                  val min_elt_exn : 'a t -> Key.t * 'a
                  val max_elt : 'a t -> (Key.t * 'a) option
                  val max_elt_exn : 'a t -> Key.t * 'a
                  val for_all : 'a t -> f:('-> bool) -> bool
                  val exists : 'a t -> f:('-> bool) -> bool
                  val fold_range_inclusive :
                    'a t ->
                    min:Key.t ->
                    max:Key.t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val range_to_alist :
                    'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                  val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val rank : 'a t -> Key.t -> int option
                  val to_tree : 'a t -> 'Tree.t
                  val to_sequence :
                    ?keys_in:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Key.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Key.t ] ->
                    'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                  val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Set :
                sig
                  module Elt :
                    sig
                      type t = t
                      type comparator_witness = comparator_witness
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                    end
                  module Tree :
                    sig
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.Tree.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.Tree.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.Tree.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                    end
                  type t =
                      (Elt.t, Elt.comparator_witness) Core_kernel.Core_set.t
                  val length : t -> int
                  val is_empty : t -> bool
                  val iter : t -> f:(Elt.t -> unit) -> unit
                  val fold :
                    t ->
                    init:'accum -> f:('accum -> Elt.t -> 'accum) -> 'accum
                  val exists : t -> f:(Elt.t -> bool) -> bool
                  val for_all : t -> f:(Elt.t -> bool) -> bool
                  val count : t -> f:(Elt.t -> bool) -> int
                  val sum :
                    (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                    t -> f:(Elt.t -> 'sum) -> 'sum
                  val find : t -> f:(Elt.t -> bool) -> Elt.t option
                  val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                  val to_list : t -> Elt.t list
                  val to_array : t -> Elt.t array
                  val invariants : t -> bool
                  val mem : t -> Elt.t -> bool
                  val add : t -> Elt.t -> t
                  val remove : t -> Elt.t -> t
                  val union : t -> t -> t
                  val inter : t -> t -> t
                  val diff : t -> t -> t
                  val compare_direct : t -> t -> int
                  val equal : t -> t -> bool
                  val subset : t -> t -> bool
                  val fold_until :
                    t ->
                    init:'->
                    f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                    'b
                  val fold_right :
                    t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                  val iter2 :
                    t ->
                    t ->
                    f:([ `Both of Elt.t * Elt.t
                       | `Left of Elt.t
                       | `Right of Elt.t ] -> unit) ->
                    unit
                  val filter : t -> f:(Elt.t -> bool) -> t
                  val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                  val elements : t -> Elt.t list
                  val min_elt : t -> Elt.t option
                  val min_elt_exn : t -> Elt.t
                  val max_elt : t -> Elt.t option
                  val max_elt_exn : t -> Elt.t
                  val choose : t -> Elt.t option
                  val choose_exn : t -> Elt.t
                  val split : t -> Elt.t -> t * bool * t
                  val group_by :
                    t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                  val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                  val find_index : t -> int -> Elt.t option
                  val remove_index : t -> int -> t
                  val to_tree : t -> Tree.t
                  val to_sequence :
                    ?in_:[ `Decreasing_order
                         | `Decreasing_order_less_than_or_equal_to of Elt.t
                         | `Increasing_order
                         | `Increasing_order_greater_than_or_equal_to of
                             Elt.t ] ->
                    t -> Elt.t Core_kernel.Sequence.t
                  val to_map :
                    t ->
                    f:(Elt.t -> 'data) ->
                    (Elt.t, 'data, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t
                  val empty : t
                  val singleton : Elt.t -> t
                  val union_list : t list -> t
                  val of_list : Elt.t list -> t
                  val of_array : Elt.t array -> t
                  val of_sorted_array :
                    Elt.t array -> t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : Elt.t array -> t
                  val stable_dedup_list : Elt.t list -> Elt.t list
                  val map :
                    ('a, 'b) Core_kernel.Core_set.t -> f:('-> Elt.t) -> t
                  val filter_map :
                    ('a, 'b) Core_kernel.Core_set.t ->
                    f:('-> Elt.t option) -> t
                  val of_tree : Tree.t -> t
                  val of_map_keys :
                    (Elt.t, 'a, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t -> t
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val compare : t -> t -> int
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_t : t Bin_prot.Type_class.t
                end
              module Hashable : sig type t = t end
              val hash : t -> int
              val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
              module Table :
                sig
                  type key = t
                  type ('a, 'b) hashtbl =
                      ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                  type 'b t = (key, 'b) hashtbl
                  type ('a, 'b) t_ = 'b t
                  type 'a key_ = key
                  val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
                  val create :
                    ('a key_, 'b, unit -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_report_all_dups :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_or_error :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     ('a, 'b) t_ Core_kernel.Or_error.t)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_exn :
                    ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_multi :
                    ('a key_, 'b list,
                     ('a key_ * 'b) list -> ('a, 'b list) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_mapped :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key_exn :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val group :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                  val clear : ('a, 'b) t_ -> unit
                  val copy : ('a, 'b) t_ -> ('a, 'b) t_
                  val invariant : ('a, 'b) t_ -> unit
                  val fold :
                    ('a, 'b) t_ ->
                    init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                  val iter :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
                  val existsi :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val for_alli :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val length : ('a, 'b) t_ -> int
                  val is_empty : ('a, 'b) t_ -> bool
                  val mem : ('a, 'b) t_ -> 'a key_ -> bool
                  val remove : ('a, 'b) t_ -> 'a key_ -> unit
                  val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                  val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val add :
                    ('a, 'b) t_ ->
                    key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                  val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val change :
                    ('a, 'b) t_ ->
                    'a key_ -> ('b option -> 'b option) -> unit
                  val add_multi :
                    ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                  val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                  val map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                  val filteri :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                  val partition_map :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:('-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_mapi :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:(key:'a key_ ->
                         data:'-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_tf :
                    ('a, 'b) t_ ->
                    f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                  val partitioni_tf :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) ->
                    ('a, 'b) t_ * ('a, 'b) t_
                  val find_or_add :
                    ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                  val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                  val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                  val merge :
                    ('c,
                     ('k, 'a) t_ ->
                     ('k, 'b) t_ ->
                     f:(key:'k key_ ->
                        [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                        'c option) ->
                     ('k, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val merge_into :
                    f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                    src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                  val keys : ('a, 'b) t_ -> 'a key_ list
                  val data : ('a, 'b) t_ -> 'b list
                  val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
                  val filteri_inplace :
                    ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                  val equal :
                    ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
                  val similar :
                    ('a, 'b1) t_ ->
                    ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                  val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                  val validate :
                    name:('a key_ -> string) ->
                    'Core_kernel.Validate.check ->
                    ('a, 'b) t_ Core_kernel.Validate.check
                  val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Pooled_hashtbl :
                sig
                  type key = t
                  type ('a, 'b) hashtbl =
                      ('a, 'b) Core_kernel.Pooled_hashtbl.t
                  type 'b t = (key, 'b) hashtbl
                  type ('a, 'b) t_ = 'b t
                  type 'a key_ = key
                  val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
                  val create :
                    ('a key_, 'b, unit -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_report_all_dups :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_or_error :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     ('a, 'b) t_ Core_kernel.Or_error.t)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_exn :
                    ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_multi :
                    ('a key_, 'b list,
                     ('a key_ * 'b) list -> ('a, 'b list) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_mapped :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key_exn :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val group :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                  val clear : ('a, 'b) t_ -> unit
                  val copy : ('a, 'b) t_ -> ('a, 'b) t_
                  val invariant : ('a, 'b) t_ -> unit
                  val fold :
                    ('a, 'b) t_ ->
                    init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                  val iter :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
                  val existsi :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val for_alli :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val length : ('a, 'b) t_ -> int
                  val is_empty : ('a, 'b) t_ -> bool
                  val mem : ('a, 'b) t_ -> 'a key_ -> bool
                  val remove : ('a, 'b) t_ -> 'a key_ -> unit
                  val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                  val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val add :
                    ('a, 'b) t_ ->
                    key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                  val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val change :
                    ('a, 'b) t_ ->
                    'a key_ -> ('b option -> 'b option) -> unit
                  val add_multi :
                    ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                  val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                  val map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                  val filteri :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                  val partition_map :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:('-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_mapi :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:(key:'a key_ ->
                         data:'-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_tf :
                    ('a, 'b) t_ ->
                    f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                  val partitioni_tf :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) ->
                    ('a, 'b) t_ * ('a, 'b) t_
                  val find_or_add :
                    ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                  val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                  val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                  val merge :
                    ('c,
                     ('k, 'a) t_ ->
                     ('k, 'b) t_ ->
                     f:(key:'k key_ ->
                        [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                        'c option) ->
                     ('k, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val merge_into :
                    f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                    src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                  val keys : ('a, 'b) t_ -> 'a key_ list
                  val data : ('a, 'b) t_ -> 'b list
                  val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
                  val filteri_inplace :
                    ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                  val equal :
                    ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
                  val similar :
                    ('a, 'b1) t_ ->
                    ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                  val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                  val validate :
                    name:('a key_ -> string) ->
                    'Core_kernel.Validate.check ->
                    ('a, 'b) t_ Core_kernel.Validate.check
                  val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Hash_set :
                sig
                  type elt = t
                  type 'a hash_set = 'Core_kernel.Hash_set.t
                  type t = elt hash_set
                  type 'a t_ = t
                  type 'a elt_ = elt
                  val create :
                    ('a, unit -> 'a t_)
                    Core_kernel.Hash_set_intf.create_options_without_hashable
                  val of_list :
                    ('a, 'a elt_ list -> 'a t_)
                    Core_kernel.Hash_set_intf.create_options_without_hashable
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_t : t Bin_prot.Type_class.t
                end
              module Hash_queue :
                sig
                  module Key :
                    sig
                      type t = t
                      val hash : t -> int
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                    end
                  type 'a t
                  val length : 'a t -> int
                  val is_empty : 'a t -> bool
                  val iter : 'a t -> f:('-> unit) -> unit
                  val fold :
                    'a t ->
                    init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                  val exists : 'a t -> f:('-> bool) -> bool
                  val for_all : 'a t -> f:('-> bool) -> bool
                  val count : 'a t -> f:('-> bool) -> int
                  val sum :
                    (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                    'a t -> f:('-> 'sum) -> 'sum
                  val find : 'a t -> f:('-> bool) -> 'a option
                  val find_map : 'a t -> f:('-> 'b option) -> 'b option
                  val to_list : 'a t -> 'a list
                  val to_array : 'a t -> 'a array
                  val min_elt : 'a t -> cmp:('-> '-> int) -> 'a option
                  val max_elt : 'a t -> cmp:('-> '-> int) -> 'a option
                  val invariant : 'a t -> unit
                  val create : unit -> 'a t
                  val clear : 'a t -> unit
                  val mem : 'a t -> Key.t -> bool
                  val lookup : 'a t -> Key.t -> 'a option
                  val lookup_exn : 'a t -> Key.t -> 'a
                  val enqueue :
                    'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                  val enqueue_exn : 'a t -> Key.t -> '-> unit
                  val first : 'a t -> 'a option
                  val keys : 'a t -> Key.t list
                  val dequeue : 'a t -> 'a option
                  val dequeue_exn : 'a t -> 'a
                  val dequeue_with_key : 'a t -> (Key.t * 'a) option
                  val dequeue_with_key_exn : 'a t -> Key.t * 'a
                  val dequeue_all : 'a t -> f:('-> unit) -> unit
                  val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                  val remove_exn : 'a t -> Key.t -> unit
                  val replace : 'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                  val replace_exn : 'a t -> Key.t -> '-> unit
                  val iteri :
                    'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                  val foldi :
                    'a t ->
                    init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                end
              val pp : Format.formatter -> t -> unit
              val t_of_sexp : Sexplib.Sexp.t -> t
              val sexp_of_t : t -> Sexplib.Sexp.t
              val bin_t : t Bin_prot.Type_class.t
              val bin_read_t : t Bin_prot.Read.reader
              val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
              val bin_reader_t : t Bin_prot.Type_class.reader
              val bin_size_t : t Bin_prot.Size.sizer
              val bin_write_t : t Bin_prot.Write.writer
              val bin_writer_t : t Bin_prot.Type_class.writer
              val of_json : Ezjsonm.t -> t
              val to_json : t -> Ezjsonm.t
              val of_raw : string -> t
              val to_raw : t -> string
              val of_bytes : Core_kernel.Std.Bigstring.t -> t
              val of_bytes' : string -> t
            end
          module Value :
            sig
              type t = value
              val of_string : string -> t
              val to_string : t -> string
              val ( >= ) : t -> t -> bool
              val ( <= ) : t -> t -> bool
              val ( = ) : t -> t -> bool
              val ( > ) : t -> t -> bool
              val ( < ) : t -> t -> bool
              val ( <> ) : t -> t -> bool
              val equal : t -> t -> bool
              val compare : t -> t -> int
              val min : t -> t -> t
              val max : t -> t -> t
              val ascending : t -> t -> int
              val descending : t -> t -> int
              val between : t -> low:t -> high:t -> bool
              module Replace_polymorphic_compare :
                sig
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val _squelch_unused_module_warning_ : unit
                end
              type comparator_witness
              val validate_lbound :
                min:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val validate_ubound :
                max:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val validate_bound :
                min:t Core_kernel.Comparable_intf.bound ->
                max:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val comparator :
                (t, comparator_witness) Core_kernel.Comparator.comparator
              module Map :
                sig
                  module Key :
                    sig
                      type t = t
                      type comparator_witness = comparator_witness
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                    end
                  module Tree :
                    sig
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.Tree.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'a t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'a t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                    end
                  type 'a t =
                      (Key.t, 'a, Key.comparator_witness)
                      Core_kernel.Core_map.t
                  val empty : 'a t
                  val singleton : Key.t -> '-> 'a t
                  val of_alist :
                    (Key.t * 'a) list ->
                    [ `Duplicate_key of Key.t | `Ok of 'a t ]
                  val of_alist_or_error :
                    (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                  val of_alist_exn : (Key.t * 'a) list -> 'a t
                  val of_alist_multi : (Key.t * 'a) list -> 'a list t
                  val of_alist_fold :
                    (Key.t * 'a) list ->
                    init:'-> f:('-> '-> 'b) -> 'b t
                  val of_alist_reduce :
                    (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                  val of_sorted_array :
                    (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : (Key.t * 'a) array -> 'a t
                  val of_tree : 'Tree.t -> 'a t
                  val invariants : 'a t -> bool
                  val is_empty : 'a t -> bool
                  val length : 'a t -> int
                  val add : 'a t -> key:Key.t -> data:'-> 'a t
                  val add_multi :
                    'a list t -> key:Key.t -> data:'-> 'a list t
                  val change :
                    'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                  val find : 'a t -> Key.t -> 'a option
                  val find_exn : 'a t -> Key.t -> 'a
                  val remove : 'a t -> Key.t -> 'a t
                  val mem : 'a t -> Key.t -> bool
                  val iter : 'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                  val iter2 :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       data:[ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       unit) ->
                    unit
                  val map : 'a t -> f:('-> 'b) -> 'b t
                  val mapi : 'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                  val fold :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val fold_right :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val filter :
                    'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                  val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                  val filter_mapi :
                    'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                  val compare_direct :
                    ('-> '-> int) -> 'a t -> 'a t -> int
                  val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                  val keys : 'a t -> Key.t list
                  val data : 'a t -> 'a list
                  val to_alist : 'a t -> (Key.t * 'a) list
                  val validate :
                    name:(Key.t -> string) ->
                    'Core_kernel.Validate.check ->
                    'a t Core_kernel.Validate.check
                  val merge :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       'c option) ->
                    'c t
                  val symmetric_diff :
                    'a t ->
                    'a t ->
                    data_equal:('-> '-> bool) ->
                    (Key.t *
                     [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                    Core_kernel.Sequence.t
                  val min_elt : 'a t -> (Key.t * 'a) option
                  val min_elt_exn : 'a t -> Key.t * 'a
                  val max_elt : 'a t -> (Key.t * 'a) option
                  val max_elt_exn : 'a t -> Key.t * 'a
                  val for_all : 'a t -> f:('-> bool) -> bool
                  val exists : 'a t -> f:('-> bool) -> bool
                  val fold_range_inclusive :
                    'a t ->
                    min:Key.t ->
                    max:Key.t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val range_to_alist :
                    'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                  val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val rank : 'a t -> Key.t -> int option
                  val to_tree : 'a t -> 'Tree.t
                  val to_sequence :
                    ?keys_in:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Key.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Key.t ] ->
                    'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                  val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Set :
                sig
                  module Elt :
                    sig
                      type t = t
                      type comparator_witness = comparator_witness
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                    end
                  module Tree :
                    sig
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.Tree.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.Tree.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.Tree.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                    end
                  type t =
                      (Elt.t, Elt.comparator_witness) Core_kernel.Core_set.t
                  val length : t -> int
                  val is_empty : t -> bool
                  val iter : t -> f:(Elt.t -> unit) -> unit
                  val fold :
                    t ->
                    init:'accum -> f:('accum -> Elt.t -> 'accum) -> 'accum
                  val exists : t -> f:(Elt.t -> bool) -> bool
                  val for_all : t -> f:(Elt.t -> bool) -> bool
                  val count : t -> f:(Elt.t -> bool) -> int
                  val sum :
                    (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                    t -> f:(Elt.t -> 'sum) -> 'sum
                  val find : t -> f:(Elt.t -> bool) -> Elt.t option
                  val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                  val to_list : t -> Elt.t list
                  val to_array : t -> Elt.t array
                  val invariants : t -> bool
                  val mem : t -> Elt.t -> bool
                  val add : t -> Elt.t -> t
                  val remove : t -> Elt.t -> t
                  val union : t -> t -> t
                  val inter : t -> t -> t
                  val diff : t -> t -> t
                  val compare_direct : t -> t -> int
                  val equal : t -> t -> bool
                  val subset : t -> t -> bool
                  val fold_until :
                    t ->
                    init:'->
                    f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                    'b
                  val fold_right :
                    t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                  val iter2 :
                    t ->
                    t ->
                    f:([ `Both of Elt.t * Elt.t
                       | `Left of Elt.t
                       | `Right of Elt.t ] -> unit) ->
                    unit
                  val filter : t -> f:(Elt.t -> bool) -> t
                  val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                  val elements : t -> Elt.t list
                  val min_elt : t -> Elt.t option
                  val min_elt_exn : t -> Elt.t
                  val max_elt : t -> Elt.t option
                  val max_elt_exn : t -> Elt.t
                  val choose : t -> Elt.t option
                  val choose_exn : t -> Elt.t
                  val split : t -> Elt.t -> t * bool * t
                  val group_by :
                    t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                  val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                  val find_index : t -> int -> Elt.t option
                  val remove_index : t -> int -> t
                  val to_tree : t -> Tree.t
                  val to_sequence :
                    ?in_:[ `Decreasing_order
                         | `Decreasing_order_less_than_or_equal_to of Elt.t
                         | `Increasing_order
                         | `Increasing_order_greater_than_or_equal_to of
                             Elt.t ] ->
                    t -> Elt.t Core_kernel.Sequence.t
                  val to_map :
                    t ->
                    f:(Elt.t -> 'data) ->
                    (Elt.t, 'data, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t
                  val empty : t
                  val singleton : Elt.t -> t
                  val union_list : t list -> t
                  val of_list : Elt.t list -> t
                  val of_array : Elt.t array -> t
                  val of_sorted_array :
                    Elt.t array -> t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : Elt.t array -> t
                  val stable_dedup_list : Elt.t list -> Elt.t list
                  val map :
                    ('a, 'b) Core_kernel.Core_set.t -> f:('-> Elt.t) -> t
                  val filter_map :
                    ('a, 'b) Core_kernel.Core_set.t ->
                    f:('-> Elt.t option) -> t
                  val of_tree : Tree.t -> t
                  val of_map_keys :
                    (Elt.t, 'a, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t -> t
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val compare : t -> t -> int
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_t : t Bin_prot.Type_class.t
                end
              module Hashable : sig type t = t end
              val hash : t -> int
              val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
              module Table :
                sig
                  type key = t
                  type ('a, 'b) hashtbl =
                      ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                  type 'b t = (key, 'b) hashtbl
                  type ('a, 'b) t_ = 'b t
                  type 'a key_ = key
                  val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
                  val create :
                    ('a key_, 'b, unit -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_report_all_dups :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_or_error :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     ('a, 'b) t_ Core_kernel.Or_error.t)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_exn :
                    ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_multi :
                    ('a key_, 'b list,
                     ('a key_ * 'b) list -> ('a, 'b list) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_mapped :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key_exn :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val group :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                  val clear : ('a, 'b) t_ -> unit
                  val copy : ('a, 'b) t_ -> ('a, 'b) t_
                  val invariant : ('a, 'b) t_ -> unit
                  val fold :
                    ('a, 'b) t_ ->
                    init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                  val iter :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
                  val existsi :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val for_alli :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val length : ('a, 'b) t_ -> int
                  val is_empty : ('a, 'b) t_ -> bool
                  val mem : ('a, 'b) t_ -> 'a key_ -> bool
                  val remove : ('a, 'b) t_ -> 'a key_ -> unit
                  val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                  val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val add :
                    ('a, 'b) t_ ->
                    key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                  val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val change :
                    ('a, 'b) t_ ->
                    'a key_ -> ('b option -> 'b option) -> unit
                  val add_multi :
                    ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                  val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                  val map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                  val filteri :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                  val partition_map :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:('-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_mapi :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:(key:'a key_ ->
                         data:'-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_tf :
                    ('a, 'b) t_ ->
                    f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                  val partitioni_tf :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) ->
                    ('a, 'b) t_ * ('a, 'b) t_
                  val find_or_add :
                    ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                  val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                  val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                  val merge :
                    ('c,
                     ('k, 'a) t_ ->
                     ('k, 'b) t_ ->
                     f:(key:'k key_ ->
                        [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                        'c option) ->
                     ('k, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val merge_into :
                    f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                    src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                  val keys : ('a, 'b) t_ -> 'a key_ list
                  val data : ('a, 'b) t_ -> 'b list
                  val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
                  val filteri_inplace :
                    ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                  val equal :
                    ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
                  val similar :
                    ('a, 'b1) t_ ->
                    ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                  val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                  val validate :
                    name:('a key_ -> string) ->
                    'Core_kernel.Validate.check ->
                    ('a, 'b) t_ Core_kernel.Validate.check
                  val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Pooled_hashtbl :
                sig
                  type key = t
                  type ('a, 'b) hashtbl =
                      ('a, 'b) Core_kernel.Pooled_hashtbl.t
                  type 'b t = (key, 'b) hashtbl
                  type ('a, 'b) t_ = 'b t
                  type 'a key_ = key
                  val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
                  val create :
                    ('a key_, 'b, unit -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_report_all_dups :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_or_error :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     ('a, 'b) t_ Core_kernel.Or_error.t)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_exn :
                    ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_multi :
                    ('a key_, 'b list,
                     ('a key_ * 'b) list -> ('a, 'b list) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_mapped :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key_exn :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val group :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                  val clear : ('a, 'b) t_ -> unit
                  val copy : ('a, 'b) t_ -> ('a, 'b) t_
                  val invariant : ('a, 'b) t_ -> unit
                  val fold :
                    ('a, 'b) t_ ->
                    init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                  val iter :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
                  val existsi :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val for_alli :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val length : ('a, 'b) t_ -> int
                  val is_empty : ('a, 'b) t_ -> bool
                  val mem : ('a, 'b) t_ -> 'a key_ -> bool
                  val remove : ('a, 'b) t_ -> 'a key_ -> unit
                  val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                  val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val add :
                    ('a, 'b) t_ ->
                    key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                  val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val change :
                    ('a, 'b) t_ ->
                    'a key_ -> ('b option -> 'b option) -> unit
                  val add_multi :
                    ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                  val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                  val map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                  val filteri :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                  val partition_map :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:('-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_mapi :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:(key:'a key_ ->
                         data:'-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_tf :
                    ('a, 'b) t_ ->
                    f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                  val partitioni_tf :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) ->
                    ('a, 'b) t_ * ('a, 'b) t_
                  val find_or_add :
                    ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                  val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                  val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                  val merge :
                    ('c,
                     ('k, 'a) t_ ->
                     ('k, 'b) t_ ->
                     f:(key:'k key_ ->
                        [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                        'c option) ->
                     ('k, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val merge_into :
                    f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                    src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                  val keys : ('a, 'b) t_ -> 'a key_ list
                  val data : ('a, 'b) t_ -> 'b list
                  val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
                  val filteri_inplace :
                    ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                  val equal :
                    ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
                  val similar :
                    ('a, 'b1) t_ ->
                    ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                  val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                  val validate :
                    name:('a key_ -> string) ->
                    'Core_kernel.Validate.check ->
                    ('a, 'b) t_ Core_kernel.Validate.check
                  val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Hash_set :
                sig
                  type elt = t
                  type 'a hash_set = 'Core_kernel.Hash_set.t
                  type t = elt hash_set
                  type 'a t_ = t
                  type 'a elt_ = elt
                  val create :
                    ('a, unit -> 'a t_)
                    Core_kernel.Hash_set_intf.create_options_without_hashable
                  val of_list :
                    ('a, 'a elt_ list -> 'a t_)
                    Core_kernel.Hash_set_intf.create_options_without_hashable
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_t : t Bin_prot.Type_class.t
                end
              module Hash_queue :
                sig
                  module Key :
                    sig
                      type t = t
                      val hash : t -> int
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                    end
                  type 'a t
                  val length : 'a t -> int
                  val is_empty : 'a t -> bool
                  val iter : 'a t -> f:('-> unit) -> unit
                  val fold :
                    'a t ->
                    init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                  val exists : 'a t -> f:('-> bool) -> bool
                  val for_all : 'a t -> f:('-> bool) -> bool
                  val count : 'a t -> f:('-> bool) -> int
                  val sum :
                    (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                    'a t -> f:('-> 'sum) -> 'sum
                  val find : 'a t -> f:('-> bool) -> 'a option
                  val find_map : 'a t -> f:('-> 'b option) -> 'b option
                  val to_list : 'a t -> 'a list
                  val to_array : 'a t -> 'a array
                  val min_elt : 'a t -> cmp:('-> '-> int) -> 'a option
                  val max_elt : 'a t -> cmp:('-> '-> int) -> 'a option
                  val invariant : 'a t -> unit
                  val create : unit -> 'a t
                  val clear : 'a t -> unit
                  val mem : 'a t -> Key.t -> bool
                  val lookup : 'a t -> Key.t -> 'a option
                  val lookup_exn : 'a t -> Key.t -> 'a
                  val enqueue :
                    'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                  val enqueue_exn : 'a t -> Key.t -> '-> unit
                  val first : 'a t -> 'a option
                  val keys : 'a t -> Key.t list
                  val dequeue : 'a t -> 'a option
                  val dequeue_exn : 'a t -> 'a
                  val dequeue_with_key : 'a t -> (Key.t * 'a) option
                  val dequeue_with_key_exn : 'a t -> Key.t * 'a
                  val dequeue_all : 'a t -> f:('-> unit) -> unit
                  val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                  val remove_exn : 'a t -> Key.t -> unit
                  val replace : 'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                  val replace_exn : 'a t -> Key.t -> '-> unit
                  val iteri :
                    'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                  val foldi :
                    'a t ->
                    init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                end
              val pp : Format.formatter -> t -> unit
              val t_of_sexp : Sexplib.Sexp.t -> t
              val sexp_of_t : t -> Sexplib.Sexp.t
              val bin_t : t Bin_prot.Type_class.t
              val bin_read_t : t Bin_prot.Read.reader
              val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
              val bin_reader_t : t Bin_prot.Type_class.reader
              val bin_size_t : t Bin_prot.Size.sizer
              val bin_write_t : t Bin_prot.Write.writer
              val bin_writer_t : t Bin_prot.Type_class.writer
              val of_json : Ezjsonm.t -> t
              val to_json : t -> Ezjsonm.t
              val merge : t IrminMerge.t
            end
          module Branch :
            sig
              type t = branch
              val of_string : string -> t
              val to_string : t -> string
              val ( >= ) : t -> t -> bool
              val ( <= ) : t -> t -> bool
              val ( = ) : t -> t -> bool
              val ( > ) : t -> t -> bool
              val ( < ) : t -> t -> bool
              val ( <> ) : t -> t -> bool
              val equal : t -> t -> bool
              val compare : t -> t -> int
              val min : t -> t -> t
              val max : t -> t -> t
              val ascending : t -> t -> int
              val descending : t -> t -> int
              val between : t -> low:t -> high:t -> bool
              module Replace_polymorphic_compare :
                sig
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val _squelch_unused_module_warning_ : unit
                end
              type comparator_witness
              val validate_lbound :
                min:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val validate_ubound :
                max:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val validate_bound :
                min:t Core_kernel.Comparable_intf.bound ->
                max:t Core_kernel.Comparable_intf.bound ->
                t Core_kernel.Validate.check
              val comparator :
                (t, comparator_witness) Core_kernel.Comparator.comparator
              module Map :
                sig
                  module Key :
                    sig
                      type t = t
                      type comparator_witness = comparator_witness
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                    end
                  module Tree :
                    sig
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.Tree.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'a t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'a t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                    end
                  type 'a t =
                      (Key.t, 'a, Key.comparator_witness)
                      Core_kernel.Core_map.t
                  val empty : 'a t
                  val singleton : Key.t -> '-> 'a t
                  val of_alist :
                    (Key.t * 'a) list ->
                    [ `Duplicate_key of Key.t | `Ok of 'a t ]
                  val of_alist_or_error :
                    (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                  val of_alist_exn : (Key.t * 'a) list -> 'a t
                  val of_alist_multi : (Key.t * 'a) list -> 'a list t
                  val of_alist_fold :
                    (Key.t * 'a) list ->
                    init:'-> f:('-> '-> 'b) -> 'b t
                  val of_alist_reduce :
                    (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                  val of_sorted_array :
                    (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : (Key.t * 'a) array -> 'a t
                  val of_tree : 'Tree.t -> 'a t
                  val invariants : 'a t -> bool
                  val is_empty : 'a t -> bool
                  val length : 'a t -> int
                  val add : 'a t -> key:Key.t -> data:'-> 'a t
                  val add_multi :
                    'a list t -> key:Key.t -> data:'-> 'a list t
                  val change :
                    'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                  val find : 'a t -> Key.t -> 'a option
                  val find_exn : 'a t -> Key.t -> 'a
                  val remove : 'a t -> Key.t -> 'a t
                  val mem : 'a t -> Key.t -> bool
                  val iter : 'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                  val iter2 :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       data:[ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       unit) ->
                    unit
                  val map : 'a t -> f:('-> 'b) -> 'b t
                  val mapi : 'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                  val fold :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val fold_right :
                    'a t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val filter :
                    'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                  val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                  val filter_mapi :
                    'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                  val compare_direct :
                    ('-> '-> int) -> 'a t -> 'a t -> int
                  val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                  val keys : 'a t -> Key.t list
                  val data : 'a t -> 'a list
                  val to_alist : 'a t -> (Key.t * 'a) list
                  val validate :
                    name:(Key.t -> string) ->
                    'Core_kernel.Validate.check ->
                    'a t Core_kernel.Validate.check
                  val merge :
                    'a t ->
                    'b t ->
                    f:(key:Key.t ->
                       [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                       'c option) ->
                    'c t
                  val symmetric_diff :
                    'a t ->
                    'a t ->
                    data_equal:('-> '-> bool) ->
                    (Key.t *
                     [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                    Core_kernel.Sequence.t
                  val min_elt : 'a t -> (Key.t * 'a) option
                  val min_elt_exn : 'a t -> Key.t * 'a
                  val max_elt : 'a t -> (Key.t * 'a) option
                  val max_elt_exn : 'a t -> Key.t * 'a
                  val for_all : 'a t -> f:('-> bool) -> bool
                  val exists : 'a t -> f:('-> bool) -> bool
                  val fold_range_inclusive :
                    'a t ->
                    min:Key.t ->
                    max:Key.t ->
                    init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                  val range_to_alist :
                    'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                  val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                  val rank : 'a t -> Key.t -> int option
                  val to_tree : 'a t -> 'Tree.t
                  val to_sequence :
                    ?keys_in:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Key.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Key.t ] ->
                    'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                  val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Set :
                sig
                  module Elt :
                    sig
                      type t = t
                      type comparator_witness = comparator_witness
                      val comparator :
                        (t, comparator_witness)
                        Core_kernel.Comparator.comparator
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                    end
                  module Tree :
                    sig
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.Tree.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.Tree.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.Tree.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                    end
                  type t =
                      (Elt.t, Elt.comparator_witness) Core_kernel.Core_set.t
                  val length : t -> int
                  val is_empty : t -> bool
                  val iter : t -> f:(Elt.t -> unit) -> unit
                  val fold :
                    t ->
                    init:'accum -> f:('accum -> Elt.t -> 'accum) -> 'accum
                  val exists : t -> f:(Elt.t -> bool) -> bool
                  val for_all : t -> f:(Elt.t -> bool) -> bool
                  val count : t -> f:(Elt.t -> bool) -> int
                  val sum :
                    (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                    t -> f:(Elt.t -> 'sum) -> 'sum
                  val find : t -> f:(Elt.t -> bool) -> Elt.t option
                  val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                  val to_list : t -> Elt.t list
                  val to_array : t -> Elt.t array
                  val invariants : t -> bool
                  val mem : t -> Elt.t -> bool
                  val add : t -> Elt.t -> t
                  val remove : t -> Elt.t -> t
                  val union : t -> t -> t
                  val inter : t -> t -> t
                  val diff : t -> t -> t
                  val compare_direct : t -> t -> int
                  val equal : t -> t -> bool
                  val subset : t -> t -> bool
                  val fold_until :
                    t ->
                    init:'->
                    f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                    'b
                  val fold_right :
                    t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                  val iter2 :
                    t ->
                    t ->
                    f:([ `Both of Elt.t * Elt.t
                       | `Left of Elt.t
                       | `Right of Elt.t ] -> unit) ->
                    unit
                  val filter : t -> f:(Elt.t -> bool) -> t
                  val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                  val elements : t -> Elt.t list
                  val min_elt : t -> Elt.t option
                  val min_elt_exn : t -> Elt.t
                  val max_elt : t -> Elt.t option
                  val max_elt_exn : t -> Elt.t
                  val choose : t -> Elt.t option
                  val choose_exn : t -> Elt.t
                  val split : t -> Elt.t -> t * bool * t
                  val group_by :
                    t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                  val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                  val find_index : t -> int -> Elt.t option
                  val remove_index : t -> int -> t
                  val to_tree : t -> Tree.t
                  val to_sequence :
                    ?in_:[ `Decreasing_order
                         | `Decreasing_order_less_than_or_equal_to of Elt.t
                         | `Increasing_order
                         | `Increasing_order_greater_than_or_equal_to of
                             Elt.t ] ->
                    t -> Elt.t Core_kernel.Sequence.t
                  val to_map :
                    t ->
                    f:(Elt.t -> 'data) ->
                    (Elt.t, 'data, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t
                  val empty : t
                  val singleton : Elt.t -> t
                  val union_list : t list -> t
                  val of_list : Elt.t list -> t
                  val of_array : Elt.t array -> t
                  val of_sorted_array :
                    Elt.t array -> t Core_kernel.Or_error.t
                  val of_sorted_array_unchecked : Elt.t array -> t
                  val stable_dedup_list : Elt.t list -> Elt.t list
                  val map :
                    ('a, 'b) Core_kernel.Core_set.t -> f:('-> Elt.t) -> t
                  val filter_map :
                    ('a, 'b) Core_kernel.Core_set.t ->
                    f:('-> Elt.t option) -> t
                  val of_tree : Tree.t -> t
                  val of_map_keys :
                    (Elt.t, 'a, Elt.comparator_witness)
                    Core_kernel.Core_set_intf.Map.t -> t
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val compare : t -> t -> int
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_t : t Bin_prot.Type_class.t
                end
              module Hashable : sig type t = t end
              val hash : t -> int
              val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
              module Table :
                sig
                  type key = t
                  type ('a, 'b) hashtbl =
                      ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                  type 'b t = (key, 'b) hashtbl
                  type ('a, 'b) t_ = 'b t
                  type 'a key_ = key
                  val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
                  val create :
                    ('a key_, 'b, unit -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_report_all_dups :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_or_error :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     ('a, 'b) t_ Core_kernel.Or_error.t)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_exn :
                    ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_multi :
                    ('a key_, 'b list,
                     ('a key_ * 'b) list -> ('a, 'b list) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_mapped :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key_exn :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val group :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                  val clear : ('a, 'b) t_ -> unit
                  val copy : ('a, 'b) t_ -> ('a, 'b) t_
                  val invariant : ('a, 'b) t_ -> unit
                  val fold :
                    ('a, 'b) t_ ->
                    init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                  val iter :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
                  val existsi :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val for_alli :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val length : ('a, 'b) t_ -> int
                  val is_empty : ('a, 'b) t_ -> bool
                  val mem : ('a, 'b) t_ -> 'a key_ -> bool
                  val remove : ('a, 'b) t_ -> 'a key_ -> unit
                  val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                  val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val add :
                    ('a, 'b) t_ ->
                    key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                  val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val change :
                    ('a, 'b) t_ ->
                    'a key_ -> ('b option -> 'b option) -> unit
                  val add_multi :
                    ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                  val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                  val map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                  val filteri :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                  val partition_map :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:('-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_mapi :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:(key:'a key_ ->
                         data:'-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_tf :
                    ('a, 'b) t_ ->
                    f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                  val partitioni_tf :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) ->
                    ('a, 'b) t_ * ('a, 'b) t_
                  val find_or_add :
                    ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                  val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                  val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                  val merge :
                    ('c,
                     ('k, 'a) t_ ->
                     ('k, 'b) t_ ->
                     f:(key:'k key_ ->
                        [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                        'c option) ->
                     ('k, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val merge_into :
                    f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                    src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                  val keys : ('a, 'b) t_ -> 'a key_ list
                  val data : ('a, 'b) t_ -> 'b list
                  val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
                  val filteri_inplace :
                    ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                  val equal :
                    ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
                  val similar :
                    ('a, 'b1) t_ ->
                    ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                  val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                  val validate :
                    name:('a key_ -> string) ->
                    'Core_kernel.Validate.check ->
                    ('a, 'b) t_ Core_kernel.Validate.check
                  val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Pooled_hashtbl :
                sig
                  type key = t
                  type ('a, 'b) hashtbl =
                      ('a, 'b) Core_kernel.Pooled_hashtbl.t
                  type 'b t = (key, 'b) hashtbl
                  type ('a, 'b) t_ = 'b t
                  type 'a key_ = key
                  val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
                  val create :
                    ('a key_, 'b, unit -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_report_all_dups :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_or_error :
                    ('a key_, 'b,
                     ('a key_ * 'b) list ->
                     ('a, 'b) t_ Core_kernel.Or_error.t)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_exn :
                    ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val of_alist_multi :
                    ('a key_, 'b list,
                     ('a key_ * 'b) list -> ('a, 'b list) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_mapped :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) ->
                     'r list ->
                     [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val create_with_key_exn :
                    ('a key_, 'r,
                     get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val group :
                    ('a key_, 'b,
                     get_key:('-> 'a key_) ->
                     get_data:('-> 'b) ->
                     combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                    Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                  val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                  val clear : ('a, 'b) t_ -> unit
                  val copy : ('a, 'b) t_ -> ('a, 'b) t_
                  val invariant : ('a, 'b) t_ -> unit
                  val fold :
                    ('a, 'b) t_ ->
                    init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                  val iter :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
                  val existsi :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val for_alli :
                    ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
                  val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                  val length : ('a, 'b) t_ -> int
                  val is_empty : ('a, 'b) t_ -> bool
                  val mem : ('a, 'b) t_ -> 'a key_ -> bool
                  val remove : ('a, 'b) t_ -> 'a key_ -> unit
                  val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                  val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val add :
                    ('a, 'b) t_ ->
                    key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                  val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                  val change :
                    ('a, 'b) t_ ->
                    'a key_ -> ('b option -> 'b option) -> unit
                  val add_multi :
                    ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                  val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                  val map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_map :
                    ('c, ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter_mapi :
                    ('c,
                     ('a, 'b) t_ ->
                     f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                  val filteri :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                  val partition_map :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:('-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_mapi :
                    ('c,
                     ('d,
                      ('a, 'b) t_ ->
                      f:(key:'a key_ ->
                         data:'-> [ `Fst of '| `Snd of 'd ]) ->
                      ('a, 'c) t_ * ('a, 'd) t_)
                     Core_kernel.Core_hashtbl_intf.no_map_options)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val partition_tf :
                    ('a, 'b) t_ ->
                    f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                  val partitioni_tf :
                    ('a, 'b) t_ ->
                    f:(key:'a key_ -> data:'-> bool) ->
                    ('a, 'b) t_ * ('a, 'b) t_
                  val find_or_add :
                    ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                  val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                  val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
                  val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                  val merge :
                    ('c,
                     ('k, 'a) t_ ->
                     ('k, 'b) t_ ->
                     f:(key:'k key_ ->
                        [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                        'c option) ->
                     ('k, 'c) t_)
                    Core_kernel.Core_hashtbl_intf.no_map_options
                  val merge_into :
                    f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                    src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                  val keys : ('a, 'b) t_ -> 'a key_ list
                  val data : ('a, 'b) t_ -> 'b list
                  val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
                  val filteri_inplace :
                    ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                  val equal :
                    ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
                  val similar :
                    ('a, 'b1) t_ ->
                    ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                  val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                  val validate :
                    name:('a key_ -> string) ->
                    'Core_kernel.Validate.check ->
                    ('a, 'b) t_ Core_kernel.Validate.check
                  val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                  val t_of_sexp :
                    (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                  val sexp_of_t :
                    ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                  val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                  val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                  val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                  val __bin_read_t__ :
                    ('a, int -> 'a t) Bin_prot.Read.reader1
                  val bin_writer_t : ('a, 'a t) Bin_prot.Type_class.S1.writer
                  val bin_reader_t : ('a, 'a t) Bin_prot.Type_class.S1.reader
                  val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                end
              module Hash_set :
                sig
                  type elt = t
                  type 'a hash_set = 'Core_kernel.Hash_set.t
                  type t = elt hash_set
                  type 'a t_ = t
                  type 'a elt_ = elt
                  val create :
                    ('a, unit -> 'a t_)
                    Core_kernel.Hash_set_intf.create_options_without_hashable
                  val of_list :
                    ('a, 'a elt_ list -> 'a t_)
                    Core_kernel.Hash_set_intf.create_options_without_hashable
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_t : t Bin_prot.Type_class.t
                end
              module Hash_queue :
                sig
                  module Key :
                    sig
                      type t = t
                      val hash : t -> int
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                    end
                  type 'a t
                  val length : 'a t -> int
                  val is_empty : 'a t -> bool
                  val iter : 'a t -> f:('-> unit) -> unit
                  val fold :
                    'a t ->
                    init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                  val exists : 'a t -> f:('-> bool) -> bool
                  val for_all : 'a t -> f:('-> bool) -> bool
                  val count : 'a t -> f:('-> bool) -> int
                  val sum :
                    (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                    'a t -> f:('-> 'sum) -> 'sum
                  val find : 'a t -> f:('-> bool) -> 'a option
                  val find_map : 'a t -> f:('-> 'b option) -> 'b option
                  val to_list : 'a t -> 'a list
                  val to_array : 'a t -> 'a array
                  val min_elt : 'a t -> cmp:('-> '-> int) -> 'a option
                  val max_elt : 'a t -> cmp:('-> '-> int) -> 'a option
                  val invariant : 'a t -> unit
                  val create : unit -> 'a t
                  val clear : 'a t -> unit
                  val mem : 'a t -> Key.t -> bool
                  val lookup : 'a t -> Key.t -> 'a option
                  val lookup_exn : 'a t -> Key.t -> 'a
                  val enqueue :
                    'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                  val enqueue_exn : 'a t -> Key.t -> '-> unit
                  val first : 'a t -> 'a option
                  val keys : 'a t -> Key.t list
                  val dequeue : 'a t -> 'a option
                  val dequeue_exn : 'a t -> 'a
                  val dequeue_with_key : 'a t -> (Key.t * 'a) option
                  val dequeue_with_key_exn : 'a t -> Key.t * 'a
                  val dequeue_all : 'a t -> f:('-> unit) -> unit
                  val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                  val remove_exn : 'a t -> Key.t -> unit
                  val replace : 'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                  val replace_exn : 'a t -> Key.t -> '-> unit
                  val iteri :
                    'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                  val foldi :
                    'a t ->
                    init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                end
              val pp : Format.formatter -> t -> unit
              val t_of_sexp : Sexplib.Sexp.t -> t
              val sexp_of_t : t -> Sexplib.Sexp.t
              val bin_t : t Bin_prot.Type_class.t
              val bin_read_t : t Bin_prot.Read.reader
              val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
              val bin_reader_t : t Bin_prot.Type_class.reader
              val bin_size_t : t Bin_prot.Size.sizer
              val bin_write_t : t Bin_prot.Write.writer
              val bin_writer_t : t Bin_prot.Type_class.writer
              val of_json : Ezjsonm.t -> t
              val to_json : t -> Ezjsonm.t
              val of_raw : string -> t
              val to_raw : t -> string
              val of_bytes : Core_kernel.Std.Bigstring.t -> t
              val of_bytes' : string -> t
              val master : t
            end
          module Graph :
            sig
              type t
              module V :
                sig
                  type t = (Block.key, Tag.key) IrminGraph.vertex
                  val compare : t -> t -> int
                  val hash : t -> int
                  val equal : t -> t -> bool
                  type label
                  val create : label -> t
                  val label : t -> label
                end
              type vertex = V.t
              module E :
                sig
                  type t
                  val compare : t -> t -> int
                  type vertex = vertex
                  val src : t -> vertex
                  val dst : t -> vertex
                  type label
                  val create : vertex -> label -> vertex -> t
                  val label : t -> label
                end
              type edge = E.t
              val is_directed : bool
              val is_empty : t -> bool
              val nb_vertex : t -> int
              val nb_edges : t -> int
              val out_degree : t -> vertex -> int
              val in_degree : t -> vertex -> int
              val mem_vertex : t -> vertex -> bool
              val mem_edge : t -> vertex -> vertex -> bool
              val mem_edge_e : t -> edge -> bool
              val find_edge : t -> vertex -> vertex -> edge
              val find_all_edges : t -> vertex -> vertex -> edge list
              val succ : t -> vertex -> vertex list
              val pred : t -> vertex -> vertex list
              val succ_e : t -> vertex -> edge list
              val pred_e : t -> vertex -> edge list
              val iter_vertex : (vertex -> unit) -> t -> unit
              val fold_vertex : (vertex -> '-> 'a) -> t -> '-> 'a
              val iter_edges : (vertex -> vertex -> unit) -> t -> unit
              val fold_edges :
                (vertex -> vertex -> '-> 'a) -> t -> '-> 'a
              val iter_edges_e : (edge -> unit) -> t -> unit
              val fold_edges_e : (edge -> '-> 'a) -> t -> '-> 'a
              val map_vertex : (vertex -> vertex) -> t -> t
              val iter_succ : (vertex -> unit) -> t -> vertex -> unit
              val iter_pred : (vertex -> unit) -> t -> vertex -> unit
              val fold_succ : (vertex -> '-> 'a) -> t -> vertex -> '-> 'a
              val fold_pred : (vertex -> '-> 'a) -> t -> vertex -> '-> 'a
              val iter_succ_e : (edge -> unit) -> t -> vertex -> unit
              val fold_succ_e : (edge -> '-> 'a) -> t -> vertex -> '-> 'a
              val iter_pred_e : (edge -> unit) -> t -> vertex -> unit
              val fold_pred_e : (edge -> '-> 'a) -> t -> vertex -> '-> 'a
              val create : ?size:int -> unit -> t
              val clear : t -> unit
              val copy : t -> t
              val add_vertex : t -> vertex -> unit
              val remove_vertex : t -> vertex -> unit
              val add_edge : t -> vertex -> vertex -> unit
              val add_edge_e : t -> edge -> unit
              val remove_edge : t -> vertex -> vertex -> unit
              val remove_edge_e : t -> edge -> unit
              val transitive_closure : ?reflexive:bool -> t -> t
              val add_transitive_closure : ?reflexive:bool -> t -> t
              val transitive_reduction : ?reflexive:bool -> t -> t
              val replace_by_transitive_reduction : ?reflexive:bool -> t -> t
              val mirror : t -> t
              val complement : t -> t
              val intersect : t -> t -> t
              val union : t -> t -> t
              module Topological :
                sig val fold : (vertex -> '-> 'a) -> t -> '-> 'end
              val vertex : t -> vertex list
              val edges : t -> (vertex * vertex) list
              val closure :
                ?depth:int ->
                ?min:vertex list ->
                pred:(vertex -> vertex list Lwt.t) -> vertex list -> t Lwt.t
              val output :
                Format.formatter ->
                (vertex * Graph.Graphviz.DotAttributes.vertex list) list ->
                (vertex * Graph.Graphviz.DotAttributes.edge list * vertex)
                list -> string -> unit
              val min : t -> vertex list
              val max : t -> vertex list
              type dump = vertex list * (vertex * vertex) list
              val export : t -> dump
              val import : dump -> t
              module Dump :
                sig
                  type t = dump
                  val of_string : string -> t
                  val to_string : t -> string
                  val ( >= ) : t -> t -> bool
                  val ( <= ) : t -> t -> bool
                  val ( = ) : t -> t -> bool
                  val ( > ) : t -> t -> bool
                  val ( < ) : t -> t -> bool
                  val ( <> ) : t -> t -> bool
                  val equal : t -> t -> bool
                  val compare : t -> t -> int
                  val min : t -> t -> t
                  val max : t -> t -> t
                  val ascending : t -> t -> int
                  val descending : t -> t -> int
                  val between : t -> low:t -> high:t -> bool
                  module Replace_polymorphic_compare :
                    sig
                      val ( >= ) : t -> t -> bool
                      val ( <= ) : t -> t -> bool
                      val ( = ) : t -> t -> bool
                      val ( > ) : t -> t -> bool
                      val ( < ) : t -> t -> bool
                      val ( <> ) : t -> t -> bool
                      val equal : t -> t -> bool
                      val compare : t -> t -> int
                      val min : t -> t -> t
                      val max : t -> t -> t
                      val _squelch_unused_module_warning_ : unit
                    end
                  type comparator_witness
                  val validate_lbound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_ubound :
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val validate_bound :
                    min:t Core_kernel.Comparable_intf.bound ->
                    max:t Core_kernel.Comparable_intf.bound ->
                    t Core_kernel.Validate.check
                  val comparator :
                    (t, comparator_witness) Core_kernel.Comparator.comparator
                  module Map :
                    sig
                      module Key :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                        end
                      module Tree :
                        sig
                          type 'a t =
                              (Key.t, 'a, Key.comparator_witness)
                              Core_kernel.Core_map.Tree.t
                          val empty : 'a t
                          val singleton : Key.t -> '-> 'a t
                          val of_alist :
                            (Key.t * 'a) list ->
                            [ `Duplicate_key of Key.t | `Ok of 'a t ]
                          val of_alist_or_error :
                            (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                          val of_alist_exn : (Key.t * 'a) list -> 'a t
                          val of_alist_multi : (Key.t * 'a) list -> 'a list t
                          val of_alist_fold :
                            (Key.t * 'a) list ->
                            init:'-> f:('-> '-> 'b) -> 'b t
                          val of_alist_reduce :
                            (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                          val of_sorted_array :
                            (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked :
                            (Key.t * 'a) array -> 'a t
                          val of_tree : 'a t -> 'a t
                          val invariants : 'a t -> bool
                          val is_empty : 'a t -> bool
                          val length : 'a t -> int
                          val add : 'a t -> key:Key.t -> data:'-> 'a t
                          val add_multi :
                            'a list t -> key:Key.t -> data:'-> 'a list t
                          val change :
                            'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                          val find : 'a t -> Key.t -> 'a option
                          val find_exn : 'a t -> Key.t -> 'a
                          val remove : 'a t -> Key.t -> 'a t
                          val mem : 'a t -> Key.t -> bool
                          val iter :
                            'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                          val iter2 :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               data:[ `Both of 'a * 'b
                                    | `Left of 'a
                                    | `Right of 'b ] ->
                               unit) ->
                            unit
                          val map : 'a t -> f:('-> 'b) -> 'b t
                          val mapi :
                            'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                          val fold :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val fold_right :
                            'a t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val filter :
                            'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                          val filter_map :
                            'a t -> f:('-> 'b option) -> 'b t
                          val filter_mapi :
                            'a t ->
                            f:(key:Key.t -> data:'-> 'b option) -> 'b t
                          val compare_direct :
                            ('-> '-> int) -> 'a t -> 'a t -> int
                          val equal :
                            ('-> '-> bool) -> 'a t -> 'a t -> bool
                          val keys : 'a t -> Key.t list
                          val data : 'a t -> 'a list
                          val to_alist : 'a t -> (Key.t * 'a) list
                          val validate :
                            name:(Key.t -> string) ->
                            'Core_kernel.Validate.check ->
                            'a t Core_kernel.Validate.check
                          val merge :
                            'a t ->
                            'b t ->
                            f:(key:Key.t ->
                               [ `Both of 'a * 'b
                               | `Left of 'a
                               | `Right of 'b ] -> 'c option) ->
                            'c t
                          val symmetric_diff :
                            'a t ->
                            'a t ->
                            data_equal:('-> '-> bool) ->
                            (Key.t *
                             [ `Left of 'a
                             | `Right of 'a
                             | `Unequal of 'a * 'a ])
                            Core_kernel.Sequence.t
                          val min_elt : 'a t -> (Key.t * 'a) option
                          val min_elt_exn : 'a t -> Key.t * 'a
                          val max_elt : 'a t -> (Key.t * 'a) option
                          val max_elt_exn : 'a t -> Key.t * 'a
                          val for_all : 'a t -> f:('-> bool) -> bool
                          val exists : 'a t -> f:('-> bool) -> bool
                          val fold_range_inclusive :
                            'a t ->
                            min:Key.t ->
                            max:Key.t ->
                            init:'->
                            f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                          val range_to_alist :
                            'a t ->
                            min:Key.t -> max:Key.t -> (Key.t * 'a) list
                          val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                          val rank : 'a t -> Key.t -> int option
                          val to_tree : 'a t -> 'a t
                          val to_sequence :
                            ?keys_in:[ `Decreasing_order
                                     | `Decreasing_order_less_than_or_equal_to of
                                         Key.t
                                     | `Increasing_order
                                     | `Increasing_order_greater_than_or_equal_to of
                                         Key.t ] ->
                            'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                          val t_of_sexp :
                            (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                          val sexp_of_t :
                            ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                        end
                      type 'a t =
                          (Key.t, 'a, Key.comparator_witness)
                          Core_kernel.Core_map.t
                      val empty : 'a t
                      val singleton : Key.t -> '-> 'a t
                      val of_alist :
                        (Key.t * 'a) list ->
                        [ `Duplicate_key of Key.t | `Ok of 'a t ]
                      val of_alist_or_error :
                        (Key.t * 'a) list -> 'a t Core_kernel.Or_error.t
                      val of_alist_exn : (Key.t * 'a) list -> 'a t
                      val of_alist_multi : (Key.t * 'a) list -> 'a list t
                      val of_alist_fold :
                        (Key.t * 'a) list ->
                        init:'-> f:('-> '-> 'b) -> 'b t
                      val of_alist_reduce :
                        (Key.t * 'a) list -> f:('-> '-> 'a) -> 'a t
                      val of_sorted_array :
                        (Key.t * 'a) array -> 'a t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked :
                        (Key.t * 'a) array -> 'a t
                      val of_tree : 'Tree.t -> 'a t
                      val invariants : 'a t -> bool
                      val is_empty : 'a t -> bool
                      val length : 'a t -> int
                      val add : 'a t -> key:Key.t -> data:'-> 'a t
                      val add_multi :
                        'a list t -> key:Key.t -> data:'-> 'a list t
                      val change :
                        'a t -> Key.t -> ('a option -> 'a option) -> 'a t
                      val find : 'a t -> Key.t -> 'a option
                      val find_exn : 'a t -> Key.t -> 'a
                      val remove : 'a t -> Key.t -> 'a t
                      val mem : 'a t -> Key.t -> bool
                      val iter :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val iter2 :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           data:[ `Both of 'a * 'b
                                | `Left of 'a
                                | `Right of 'b ] ->
                           unit) ->
                        unit
                      val map : 'a t -> f:('-> 'b) -> 'b t
                      val mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b) -> 'b t
                      val fold :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val fold_right :
                        'a t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val filter :
                        'a t -> f:(key:Key.t -> data:'-> bool) -> 'a t
                      val filter_map : 'a t -> f:('-> 'b option) -> 'b t
                      val filter_mapi :
                        'a t -> f:(key:Key.t -> data:'-> 'b option) -> 'b t
                      val compare_direct :
                        ('-> '-> int) -> 'a t -> 'a t -> int
                      val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
                      val keys : 'a t -> Key.t list
                      val data : 'a t -> 'a list
                      val to_alist : 'a t -> (Key.t * 'a) list
                      val validate :
                        name:(Key.t -> string) ->
                        'Core_kernel.Validate.check ->
                        'a t Core_kernel.Validate.check
                      val merge :
                        'a t ->
                        'b t ->
                        f:(key:Key.t ->
                           [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                           'c option) ->
                        'c t
                      val symmetric_diff :
                        'a t ->
                        'a t ->
                        data_equal:('-> '-> bool) ->
                        (Key.t *
                         [ `Left of '| `Right of '| `Unequal of 'a * 'a ])
                        Core_kernel.Sequence.t
                      val min_elt : 'a t -> (Key.t * 'a) option
                      val min_elt_exn : 'a t -> Key.t * 'a
                      val max_elt : 'a t -> (Key.t * 'a) option
                      val max_elt_exn : 'a t -> Key.t * 'a
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val exists : 'a t -> f:('-> bool) -> bool
                      val fold_range_inclusive :
                        'a t ->
                        min:Key.t ->
                        max:Key.t ->
                        init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
                      val range_to_alist :
                        'a t -> min:Key.t -> max:Key.t -> (Key.t * 'a) list
                      val prev_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val next_key : 'a t -> Key.t -> (Key.t * 'a) option
                      val rank : 'a t -> Key.t -> int option
                      val to_tree : 'a t -> 'Tree.t
                      val to_sequence :
                        ?keys_in:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Key.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Key.t ] ->
                        'a t -> (Key.t * 'a) Core_kernel.Sequence.t
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
                      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Set :
                    sig
                      module Elt :
                        sig
                          type t = t
                          type comparator_witness = comparator_witness
                          val comparator :
                            (t, comparator_witness)
                            Core_kernel.Comparator.comparator
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                        end
                      module Tree :
                        sig
                          type t =
                              (Elt.t, Elt.comparator_witness)
                              Core_kernel.Core_set.Tree.t
                          val length : t -> int
                          val is_empty : t -> bool
                          val iter : t -> f:(Elt.t -> unit) -> unit
                          val fold :
                            t ->
                            init:'accum ->
                            f:('accum -> Elt.t -> 'accum) -> 'accum
                          val exists : t -> f:(Elt.t -> bool) -> bool
                          val for_all : t -> f:(Elt.t -> bool) -> bool
                          val count : t -> f:(Elt.t -> bool) -> int
                          val sum :
                            (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                            t -> f:(Elt.t -> 'sum) -> 'sum
                          val find : t -> f:(Elt.t -> bool) -> Elt.t option
                          val find_map :
                            t -> f:(Elt.t -> 'a option) -> 'a option
                          val to_list : t -> Elt.t list
                          val to_array : t -> Elt.t array
                          val invariants : t -> bool
                          val mem : t -> Elt.t -> bool
                          val add : t -> Elt.t -> t
                          val remove : t -> Elt.t -> t
                          val union : t -> t -> t
                          val inter : t -> t -> t
                          val diff : t -> t -> t
                          val compare_direct : t -> t -> int
                          val equal : t -> t -> bool
                          val subset : t -> t -> bool
                          val fold_until :
                            t ->
                            init:'->
                            f:('->
                               Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                            'b
                          val fold_right :
                            t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                          val iter2 :
                            t ->
                            t ->
                            f:([ `Both of Elt.t * Elt.t
                               | `Left of Elt.t
                               | `Right of Elt.t ] -> unit) ->
                            unit
                          val filter : t -> f:(Elt.t -> bool) -> t
                          val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                          val elements : t -> Elt.t list
                          val min_elt : t -> Elt.t option
                          val min_elt_exn : t -> Elt.t
                          val max_elt : t -> Elt.t option
                          val max_elt_exn : t -> Elt.t
                          val choose : t -> Elt.t option
                          val choose_exn : t -> Elt.t
                          val split : t -> Elt.t -> t * bool * t
                          val group_by :
                            t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                          val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                          val find_index : t -> int -> Elt.t option
                          val remove_index : t -> int -> t
                          val to_tree : t -> t
                          val to_sequence :
                            ?in_:[ `Decreasing_order
                                 | `Decreasing_order_less_than_or_equal_to of
                                     Elt.t
                                 | `Increasing_order
                                 | `Increasing_order_greater_than_or_equal_to of
                                     Elt.t ] ->
                            t -> Elt.t Core_kernel.Sequence.t
                          val to_map :
                            t ->
                            f:(Elt.t -> 'data) ->
                            (Elt.t, 'data, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t
                          val empty : t
                          val singleton : Elt.t -> t
                          val union_list : t list -> t
                          val of_list : Elt.t list -> t
                          val of_array : Elt.t array -> t
                          val of_sorted_array :
                            Elt.t array -> t Core_kernel.Or_error.t
                          val of_sorted_array_unchecked : Elt.t array -> t
                          val stable_dedup_list : Elt.t list -> Elt.t list
                          val map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t) -> t
                          val filter_map :
                            ('a, 'b) Core_kernel.Core_set.Tree.t ->
                            f:('-> Elt.t option) -> t
                          val of_tree : t -> t
                          val of_map_keys :
                            (Elt.t, 'a, Elt.comparator_witness)
                            Core_kernel.Core_set_intf.Map.t -> t
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type t =
                          (Elt.t, Elt.comparator_witness)
                          Core_kernel.Core_set.t
                      val length : t -> int
                      val is_empty : t -> bool
                      val iter : t -> f:(Elt.t -> unit) -> unit
                      val fold :
                        t ->
                        init:'accum ->
                        f:('accum -> Elt.t -> 'accum) -> 'accum
                      val exists : t -> f:(Elt.t -> bool) -> bool
                      val for_all : t -> f:(Elt.t -> bool) -> bool
                      val count : t -> f:(Elt.t -> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        t -> f:(Elt.t -> 'sum) -> 'sum
                      val find : t -> f:(Elt.t -> bool) -> Elt.t option
                      val find_map : t -> f:(Elt.t -> 'a option) -> 'a option
                      val to_list : t -> Elt.t list
                      val to_array : t -> Elt.t array
                      val invariants : t -> bool
                      val mem : t -> Elt.t -> bool
                      val add : t -> Elt.t -> t
                      val remove : t -> Elt.t -> t
                      val union : t -> t -> t
                      val inter : t -> t -> t
                      val diff : t -> t -> t
                      val compare_direct : t -> t -> int
                      val equal : t -> t -> bool
                      val subset : t -> t -> bool
                      val fold_until :
                        t ->
                        init:'->
                        f:('-> Elt.t -> [ `Continue of '| `Stop of 'b ]) ->
                        'b
                      val fold_right :
                        t -> init:'-> f:(Elt.t -> '-> 'b) -> 'b
                      val iter2 :
                        t ->
                        t ->
                        f:([ `Both of Elt.t * Elt.t
                           | `Left of Elt.t
                           | `Right of Elt.t ] -> unit) ->
                        unit
                      val filter : t -> f:(Elt.t -> bool) -> t
                      val partition_tf : t -> f:(Elt.t -> bool) -> t * t
                      val elements : t -> Elt.t list
                      val min_elt : t -> Elt.t option
                      val min_elt_exn : t -> Elt.t
                      val max_elt : t -> Elt.t option
                      val max_elt_exn : t -> Elt.t
                      val choose : t -> Elt.t option
                      val choose_exn : t -> Elt.t
                      val split : t -> Elt.t -> t * bool * t
                      val group_by :
                        t -> equiv:(Elt.t -> Elt.t -> bool) -> t list
                      val find_exn : t -> f:(Elt.t -> bool) -> Elt.t
                      val find_index : t -> int -> Elt.t option
                      val remove_index : t -> int -> t
                      val to_tree : t -> Tree.t
                      val to_sequence :
                        ?in_:[ `Decreasing_order
                             | `Decreasing_order_less_than_or_equal_to of
                                 Elt.t
                             | `Increasing_order
                             | `Increasing_order_greater_than_or_equal_to of
                                 Elt.t ] ->
                        t -> Elt.t Core_kernel.Sequence.t
                      val to_map :
                        t ->
                        f:(Elt.t -> 'data) ->
                        (Elt.t, 'data, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t
                      val empty : t
                      val singleton : Elt.t -> t
                      val union_list : t list -> t
                      val of_list : Elt.t list -> t
                      val of_array : Elt.t array -> t
                      val of_sorted_array :
                        Elt.t array -> t Core_kernel.Or_error.t
                      val of_sorted_array_unchecked : Elt.t array -> t
                      val stable_dedup_list : Elt.t list -> Elt.t list
                      val map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t) -> t
                      val filter_map :
                        ('a, 'b) Core_kernel.Core_set.t ->
                        f:('-> Elt.t option) -> t
                      val of_tree : Tree.t -> t
                      val of_map_keys :
                        (Elt.t, 'a, Elt.comparator_witness)
                        Core_kernel.Core_set_intf.Map.t -> t
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val compare : t -> t -> int
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hashable : sig type t = t end
                  val hash : t -> int
                  val hashable : t Core_kernel.Hashable.Hashtbl.Hashable.t
                  module Table :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Hashable.Hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Pooled_hashtbl :
                    sig
                      type key = t
                      type ('a, 'b) hashtbl =
                          ('a, 'b) Core_kernel.Pooled_hashtbl.t
                      type 'b t = (key, 'b) hashtbl
                      type ('a, 'b) t_ = 'b t
                      type 'a key_ = key
                      val hashable :
                        key Core_kernel.Core_hashtbl_intf.Hashable.t
                      val create :
                        ('a key_, 'b, unit -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_report_all_dups :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_or_error :
                        ('a key_, 'b,
                         ('a key_ * 'b) list ->
                         ('a, 'b) t_ Core_kernel.Or_error.t)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_exn :
                        ('a key_, 'b, ('a key_ * 'b) list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val of_alist_multi :
                        ('a key_, 'b list,
                         ('a key_ * 'b) list -> ('a, 'b list) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_mapped :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'b) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) ->
                         'r list ->
                         [ `Duplicate_keys of 'a key_ list
                         | `Ok of ('a, 'r) t_ ])
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val create_with_key_exn :
                        ('a key_, 'r,
                         get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val group :
                        ('a key_, 'b,
                         get_key:('-> 'a key_) ->
                         get_data:('-> 'b) ->
                         combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
                        Core_kernel.Core_hashtbl_intf.create_options_without_hashable
                      val sexp_of_key :
                        ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
                      val clear : ('a, 'b) t_ -> unit
                      val copy : ('a, 'b) t_ -> ('a, 'b) t_
                      val invariant : ('a, 'b) t_ -> unit
                      val fold :
                        ('a, 'b) t_ ->
                        init:'->
                        f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
                      val iter :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> unit) -> unit
                      val existsi :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val for_alli :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> bool
                      val for_all : ('a, 'b) t_ -> f:('-> bool) -> bool
                      val length : ('a, 'b) t_ -> int
                      val is_empty : ('a, 'b) t_ -> bool
                      val mem : ('a, 'b) t_ -> 'a key_ -> bool
                      val remove : ('a, 'b) t_ -> 'a key_ -> unit
                      val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
                      val replace :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val add :
                        ('a, 'b) t_ ->
                        key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
                      val add_exn :
                        ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
                      val change :
                        ('a, 'b) t_ ->
                        'a key_ -> ('b option -> 'b option) -> unit
                      val add_multi :
                        ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
                      val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
                      val map :
                        ('c, ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_map :
                        ('c,
                         ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter_mapi :
                        ('c,
                         ('a, 'b) t_ ->
                         f:(key:'a key_ -> data:'-> 'c option) ->
                         ('a, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val filter :
                        ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
                      val filteri :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
                      val partition_map :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:('-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_mapi :
                        ('c,
                         ('d,
                          ('a, 'b) t_ ->
                          f:(key:'a key_ ->
                             data:'-> [ `Fst of '| `Snd of 'd ]) ->
                          ('a, 'c) t_ * ('a, 'd) t_)
                         Core_kernel.Core_hashtbl_intf.no_map_options)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val partition_tf :
                        ('a, 'b) t_ ->
                        f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
                      val partitioni_tf :
                        ('a, 'b) t_ ->
                        f:(key:'a key_ -> data:'-> bool) ->
                        ('a, 'b) t_ * ('a, 'b) t_
                      val find_or_add :
                        ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
                      val find : ('a, 'b) t_ -> 'a key_ -> 'b option
                      val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
                      val find_and_remove :
                        ('a, 'b) t_ -> 'a key_ -> 'b option
                      val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
                      val merge :
                        ('c,
                         ('k, 'a) t_ ->
                         ('k, 'b) t_ ->
                         f:(key:'k key_ ->
                            [ `Both of 'a * '| `Left of '| `Right of 'b ] ->
                            'c option) ->
                         ('k, 'c) t_)
                        Core_kernel.Core_hashtbl_intf.no_map_options
                      val merge_into :
                        f:(key:'a key_ -> '-> 'b option -> 'b option) ->
                        src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
                      val keys : ('a, 'b) t_ -> 'a key_ list
                      val data : ('a, 'b) t_ -> 'b list
                      val filter_inplace :
                        ('a, 'b) t_ -> f:('-> bool) -> unit
                      val filteri_inplace :
                        ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
                      val equal :
                        ('a, 'b) t_ ->
                        ('a, 'b) t_ -> ('-> '-> bool) -> bool
                      val similar :
                        ('a, 'b1) t_ ->
                        ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
                      val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
                      val validate :
                        name:('a key_ -> string) ->
                        'Core_kernel.Validate.check ->
                        ('a, 'b) t_ Core_kernel.Validate.check
                      val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
                      val t_of_sexp :
                        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
                      val sexp_of_t :
                        ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
                      val bin_size_t : ('a, 'a t) Bin_prot.Size.sizer1
                      val bin_write_t : ('a, 'a t) Bin_prot.Write.writer1
                      val bin_read_t : ('a, 'a t) Bin_prot.Read.reader1
                      val __bin_read_t__ :
                        ('a, int -> 'a t) Bin_prot.Read.reader1
                      val bin_writer_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.writer
                      val bin_reader_t :
                        ('a, 'a t) Bin_prot.Type_class.S1.reader
                      val bin_t : ('a, 'a t) Bin_prot.Type_class.S1.t
                    end
                  module Hash_set :
                    sig
                      type elt = t
                      type 'a hash_set = 'Core_kernel.Hash_set.t
                      type t = elt hash_set
                      type 'a t_ = t
                      type 'a elt_ = elt
                      val create :
                        ('a, unit -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val of_list :
                        ('a, 'a elt_ list -> 'a t_)
                        Core_kernel.Hash_set_intf.create_options_without_hashable
                      val t_of_sexp : Sexplib.Sexp.t -> t
                      val sexp_of_t : t -> Sexplib.Sexp.t
                      val bin_size_t : t Bin_prot.Size.sizer
                      val bin_write_t : t Bin_prot.Write.writer
                      val bin_read_t : t Bin_prot.Read.reader
                      val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                      val bin_writer_t : t Bin_prot.Type_class.writer
                      val bin_reader_t : t Bin_prot.Type_class.reader
                      val bin_t : t Bin_prot.Type_class.t
                    end
                  module Hash_queue :
                    sig
                      module Key :
                        sig
                          type t = t
                          val hash : t -> int
                          val t_of_sexp : Sexplib.Sexp.t -> t
                          val sexp_of_t : t -> Sexplib.Sexp.t
                          val compare : t -> t -> int
                        end
                      type 'a t
                      val length : 'a t -> int
                      val is_empty : 'a t -> bool
                      val iter : 'a t -> f:('-> unit) -> unit
                      val fold :
                        'a t ->
                        init:'accum -> f:('accum -> '-> 'accum) -> 'accum
                      val exists : 'a t -> f:('-> bool) -> bool
                      val for_all : 'a t -> f:('-> bool) -> bool
                      val count : 'a t -> f:('-> bool) -> int
                      val sum :
                        (module Core_kernel.Commutative_group.S with type t = 'sum) ->
                        'a t -> f:('-> 'sum) -> 'sum
                      val find : 'a t -> f:('-> bool) -> 'a option
                      val find_map : 'a t -> f:('-> 'b option) -> 'b option
                      val to_list : 'a t -> 'a list
                      val to_array : 'a t -> 'a array
                      val min_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val max_elt :
                        'a t -> cmp:('-> '-> int) -> 'a option
                      val invariant : 'a t -> unit
                      val create : unit -> 'a t
                      val clear : 'a t -> unit
                      val mem : 'a t -> Key.t -> bool
                      val lookup : 'a t -> Key.t -> 'a option
                      val lookup_exn : 'a t -> Key.t -> 'a
                      val enqueue :
                        'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
                      val enqueue_exn : 'a t -> Key.t -> '-> unit
                      val first : 'a t -> 'a option
                      val keys : 'a t -> Key.t list
                      val dequeue : 'a t -> 'a option
                      val dequeue_exn : 'a t -> 'a
                      val dequeue_with_key : 'a t -> (Key.t * 'a) option
                      val dequeue_with_key_exn : 'a t -> Key.t * 'a
                      val dequeue_all : 'a t -> f:('-> unit) -> unit
                      val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
                      val remove_exn : 'a t -> Key.t -> unit
                      val replace :
                        'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
                      val replace_exn : 'a t -> Key.t -> '-> unit
                      val iteri :
                        'a t -> f:(key:Key.t -> data:'-> unit) -> unit
                      val foldi :
                        'a t ->
                        init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
                    end
                  val pp : Format.formatter -> t -> unit
                  val t_of_sexp : Sexplib.Sexp.t -> t
                  val sexp_of_t : t -> Sexplib.Sexp.t
                  val bin_t : t Bin_prot.Type_class.t
                  val bin_read_t : t Bin_prot.Read.reader
                  val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
                  val bin_reader_t : t Bin_prot.Type_class.reader
                  val bin_size_t : t Bin_prot.Size.sizer
                  val bin_write_t : t Bin_prot.Write.writer
                  val bin_writer_t : t Bin_prot.Type_class.writer
                  val of_json : Ezjsonm.t -> t
                  val to_json : t -> Ezjsonm.t
                end
            end
        end
end